Revolutionizing Web Application Deployment with Docker: A Django-Todo-CICD Project
Table of contents
Introduction:
In the world of web development, efficient deployment and scalability are crucial. Docker, a powerful containerization platform, has gained immense popularity due to its ability to streamline the deployment process. In this blog, we will explore a project that demonstrates the creation of a Dockerfile for a simple web application called "django-todo-cicd." We will build the image, run the container, verify its functionality, and then push the image to a public or private repository, such as Docker Hub. Get ready to embark on a journey that will transform the way you deploy web applications!
Step 1:
Creating the Dockerfile Our first task is to create a Dockerfile, which defines the image's contents and configuration. In this project, we'll be using the Django framework for the web application. Below is an example of a Dockerfile for the django-todo-cicd application:
FROM python:3.9
RUN pip install django==3.2
COPY . .
RUN python manage.py migrate
EXPOSE 8000
CMD ["python","manage.py","runserver","0.0.0.0:8000" ]
In this Dockerfile:
We start with the base image of Python 3.9.
Install the Django 3.2
Install the dependencies using
pip
.Copy the entire source code of the django-todo-cicd application to the working directory.
Expose port 8000, which is the default port used by Django.
Define the command to run the application using
sudo docker run -d -p 8000:8000 django-todo-app
.
Step 2:
Building the Docker Image and Running the Container Once we have the Dockerfile ready, we can build the image and run the container using the following commands:
bashCopy code# Build the image
docker build -t django-todo-cicd .
# Run the container
docker run -d -p 8000:8000 django-todo-cicd
The first command, docker build
, builds the Docker image based on the Dockerfile. We provide the -t
flag to give the image a name (django-todo-cicd
in this case).
The second command, docker run
, runs the container based on the built image. We specify the -d
flag to run the container in the background and the -p
flag to map the container's port 8000 to the host's port 8000.
Step 3:
Verifying the Application's Functionality To ensure that our application is working as expected, we can access it in a web browser by navigating to http://localhost:8000
. If everything is set up correctly, you should see the django-todo-cicd application's home page.
Step 4:
Pushing the Image to a Repository (e.g., Docker Hub) Now that our web application is running smoothly in a Docker container, it's time to push the Docker image to a public or private repository, such as Docker Hub. By doing this, we make the image available for deployment on other machines or for sharing with other developers. Here's how we can push the image to Docker Hub:
bashCopy code# Log in to Docker Hub (if not already logged in)
docker login
# Tag the image with your Docker Hub username/repository name
docker tag django-todo-cicd <your-docker-hub-username>/django-todo-cicd
# Push the image to Docker Hub
docker push <your-docker-hub-username>/django-todo-cicd
Make sure to replace <your-docker-hub-username>
with your actual Docker Hub username. The docker login
command is used to authenticate yourself with Docker Hub before pushing the image.
Conclusion:
In this project, we demonstrated the power of Docker in simplifying the deployment process of web applications. By creating a Dockerfile, building the image, running the container, and verifying its functionality, we successfully deployed the django-todo-cicd application. Furthermore, by pushing the Docker image to a repository like Docker Hub, we made the image readily available for deployment on other systems or for sharing with the development community.
Docker's containerization capabilities enable seamless application deployment and scalability, making it a game-changer for modern web development. Embrace the Docker revolution and witness the transformation it brings to your web application deployment workflows. Happy coding!
To connect with me - https://www.linkedin.com/in/subhodey/