In this article, we will build a container for a Django Application with Sqlite3 as a database using Docker. We are not going to build a Django Application from scratch. We will use a sample for this article.
You can clone the Django app from this repository.
Requirements
Docker installed
Git installed.
Dockerfile
FROM python:3.11
RUN mkdir /code
WORKDIR /code
RUN pip install --upgrade pip
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Here we write the instructions Docker needs to build our image. Instead of writting our own Dockerfile, we are going to copy the Django sample from Docker samples repository.
Building the image.
In the directory where is located the dockerfile, we run this command in our terminal.
docker build -t django-authentication .
The docker build
command uses the Dockerfile to create a new container image.
As the Docker documentation says, the -t
flag tags your image. Since we named the image django-authentication
, we can refer to that image when we run a container.
The .
at the end of the docker build
command tells Docker that it should look for the Dockerfile
in the current directory.
Running the container
docker run -dp 8000:8000 django-authentication
We use the -d
flag to run the new container in “detached” mode (in the background). We also use the -p
flag to create a mapping between the host’s port 8000 to the container’s port 8000. Without the port mapping, you wouldn’t be able to access the application
After a few seconds, we will be able to go to localhost:8000/home/
and see this page:
Conclusion
First time I dockerize a Django application. It wasn't hard, the docker documentation offers helpful samples to use. This application uses Sqlite3 as a database, so using a container was enough. But if we want to use Postgres as a database, we have to use Compose, because we have to build a container for Postgres, and Compose is used for building and running multi-containers docker applications.
Thank you for taking the time to read this article.
If you have any recommendations about other packages, architectures, how to improve my code, my English, or anything; please leave a comment or contact me through Twitter, or LinkedIn.