DEV Community

Wycliffe A. Onyango
Wycliffe A. Onyango

Posted on

100 Days of DevOps: Day 47

Dockerizing and Deploying a Python App

1. Create the Dockerfile

The first step is to create the Dockerfile in the /python_app directory. This file contains the instructions for building the Docker image.

[tony@stapp01 python_app]$ sudo vi Dockerfile
Enter fullscreen mode Exit fullscreen mode

The content of the file I used was:

# Use a Python 3.9 slim image as the base
FROM python:3.9-slim

# Set the working directory inside the container
WORKDIR /app

# Copy the requirements.txt file from the src/ directory
COPY src/requirements.txt .

# Install the dependencies
RUN pip install --no-cache-dir -r requirements.txt

# Copy the application source code from the src/ directory
COPY src/ .

# Expose port 3003
EXPOSE 3003

# Run the server.py script when the container starts
CMD ["python", "server.py"]
Enter fullscreen mode Exit fullscreen mode

This is a standard procedure for setting up a Python application inside a Docker container.

2. Build the Docker Image

Next, build the Docker image using the docker build command. The command uses the Dockerfile in the current directory (.) to create an image named nautilus/python-app.

[tony@stapp01 python_app]$ docker build -t nautilus/python-app .
Enter fullscreen mode Exit fullscreen mode

The output confirms the successful build process, showing each step from the Dockerfile being executed:

[+] Building 196.3s (10/10) FINISHED
 => [internal] load build definition from Dockerfile
 => [internal] load metadata for docker.io/library/python:3.9-slim
 => [internal] load .dockerignore
 => [1/5] FROM docker.io/library/python:3.9-slim
 => [internal] load build context
 => [2/5] WORKDIR /app
 => [3/5] COPY src/requirements.txt .
 => [4/5] RUN pip install --no-cache-dir -r requirements.txt
 => [5/5] COPY src/ .
 => exporting to image
 => => exporting layers
 => => writing image sha256:99f9bcece2819a222881e87b93f5779d9fa4cde460c25cb9a06f1d6c91c8f746
 => => naming to docker.io/nautilus/python-app
Enter fullscreen mode Exit fullscreen mode

3. Run the Docker Container

With the image built, I can now run a container from it. The docker run command is used to create and start a container. The -d flag runs it in the background, --name gives it a specific name, and -p maps the container port to a host port.

[tony@stapp01 python_app]$ docker run -d --name pythonapp_nautilus -p 8092:3003 nautilus/python-app
Enter fullscreen mode Exit fullscreen mode

The output is the container's ID, confirming that it has started successfully:

e3c4697f371922f35dbb84d9077d73f64283918b481ee92bff184dff7c0683d7
Enter fullscreen mode Exit fullscreen mode

4. Test the Application

Finally, test the application's accessibility. First, test locally on the server where the container is running.

[tony@stapp01 /]$ curl http://localhost:8092/
Welcome to xFusionCorp Industries!
Enter fullscreen mode Exit fullscreen mode

The response "Welcome to xFusionCorp Industries!" confirms the application is running and accessible on stapp01.

Next, test from a different machine (jumphost) to confirm network accessibility. You must use the hostname or IP address of the server (stapp01) instead of localhost.

thor@jumphost ~$ curl http://stapp01:8092/
Welcome to xFusionCorp Industries!
Enter fullscreen mode Exit fullscreen mode

This final output confirms that the application is successfully deployed and accessible from an external host.

Top comments (0)