Introduction
So you have a Django project, and want to run it using docker image. We will run it on Apache and Python 3.9.
Make sure, you have a running Django project, before proceeding.
Parent Docker Image
First we will create a base image, where we will install following:
- Apache
- Python 3.9
FROM centos:7
USER root
RUN yum makecache fast \
&& yum -y install epel-release \
&& yum -y update \
&& yum groupinstall "Development Tools" -y \
&& yum install openssl-devel libffi-devel bzip2-devel -y \
&& yum install httpd httpd-devel mod_ssl wget -y \
&& yum clean all \
&& rm -rf /var/cache/yum
RUN wget https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz \
&& tar xvf Python-3.9.10.tgz \
&& cd Python-3.9.10/ \
&& ./configure --prefix=/usr/local --enable-optimizations --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib" \
&& make altinstall \
&& python3.9 --version \
&& python3.9 -m pip install --upgrade pip \
&& pip3.9 install virtualenvBuild this image,
docker build -t django_base . Django App Image
# Using multi-stage builds to avoid showing secrets in docker history
FROM python38_test as intermediate
WORKDIR /var/www/html/
COPY . /var/www/html/
RUN virtualenv env --python python3.9 \
&& source /var/www/html/env/bin/activate \
&& python3.9 -m pip install -r /var/www/html/requirements.txt \
&& python3.9 -m pip install mod_wsgi \
&& virtualenv env --python python3.9 \
&& source /var/www/html/env/bin/activate \
&& mod_wsgi-express install-module
COPY ./docker/httpd.conf /etc/httpd/conf/httpd.conf
COPY ./docker/sites-enabled /etc/httpd/sites-enabled
ENV CONFIG "/var/www/html"
EXPOSE 8080
USER root
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]Build this image.
Note, if you are installing pip modules from a private artifactory, See other post on How to securely create docker image
Run Django App
Now, just pass your required environment variables to your app and run. It will run on port 8080. You can use this image either on Kubernetes or regular docker run environment.
Thanks for reading













