In this article, we’ll cover how to dockerize your Django application.
Django is an open-source Python framework that is designed with speed, security, and scalability in mind. Django encourages clean design and rapid development.
Django on Docker Hub
Search Docker Hub (in your console, GUI, or the website itself) for
django. More detailed steps can be found in the article Using Docker Hub).
You’ll find that there is an official repository for Django. It’s generally recommended to use the official repository when available.
docker run django in your terminal. Docker will install Python 3 with Django 1.9+ unless you request a different tag. A full list of tags are available here.
Writing your own Dockerfile is generally recommended, as it helps ensure you’re familiar with what is included in your image and container. It also simplifies creating future containers when developing your app.
Using the existing Django image, your Dockerfile would look like the following:
FROM django ADD . /my-django-app WORKDIR /my-django-app RUN pip install -r requirements.txt CMD [ "python", "./manage.py runserver 0.0.0.0:8000" ]
If you want to create a new Django project and its scaffolding, use this Dockerfile instead:
FROM django WORKDIR /usr/src/app CMD [ "django-admin", "startproject hello_world_django" ] CMD [ "python", "manage.py runserver 0.0.0.0:8000" ]
There are a couple of new commands in these Dockerfiles:
ADDallows you to add local directories (local to the current folder) to your Docker container
WORKDIRsets your working directory (so you do not have to run everything from the
Dockerizing without a Dockerfile
Instead of creating and building a Dockerfile, you can leverage the official Django image that’s stored on Docker Hub to run your app.
docker run --name hello-world-django -v "$PWD":/usr/src/app -w /usr/src/app -p 8000:8000 -d django bash -c "pip install -r requirements.txt && python manage.py runserver 0.0.0.0:8000"
The above command assumes the following:
- Your Django app is named
- Your app is stored in
If you want to bootstrap a new application, use the following command (using the same directory and app name as above):
docker run -it --rm --user "$(id -u):$(id -g)" -v "$PWD":/usr/src/app -w /usr/src/app django django-admin.py startproject hello_world_django
requirements.txtallows you to use the standard
pipinstall support with requirements.txt. If you need components that do not come with the Django image, you need to use this option.
At the end, you use Python to run the development server via
manage.py and bind that to the wildcard IP on port 8000. Since we already bound the container’s port 8000 to the host’s, we want to make sure the development server runs on port 8000 (Python’s default).
If you do not need the
requirements.txt file, leave it out of your command (remove the line
RUN pip install -r requirements.txt from your Dockerfile, or do not pass it to
bash in the interactive CLI approach).
If you need to
pip install packages or components not found in a package, you need to install those dependencies (using either
requirements.txt, or both). In the example above, we use
requirements.txt, but we could equally pass a
pip install package_name if we know what package(s) to look for.
While Django runs its development web server on port 8000 by default, its recommended to set port 8000 for the web server, in the event a default changes or the image you use utilizes a different default port.
DO NOT use Django’s webserver in production. Use NGINX or Apache with the appropriate proxy (usually WCGI) running Python and Django.
Next: Dockerize your Flask Application
Get started with dockerizing your Flask application.