A little while back I read an article sharing this person's basic
Dockerfile which they use for all their projects. I thought this was a good idea to do and went about creating and releasing my own. This blog post will share my basic
Dockerfile I use for Python projects as well as explain some of the less usual parts.
So without much more ado, here is my basic
Dockerfile I use for Python Projects.
FROM python:3.6-slim-stretch # Update to latest packages and add build-essential and python-dev RUN apt-get update && \ apt-get install --no-install-recommends -y \ build-essential=12.3 \ python3-dev=3.5.3-1 && \ rm -fr /var/lib/apt/lists/* # Install Dumb Init RUN pip install dumb-init==1.2.2 # Install required packages. COPY requirements.txt /tmp/ RUN pip install -r /tmp/requirements.txt # Create non-root user RUN useradd --create-home app WORKDIR /home/app USER app # Copy the code COPY src/ ./src/ # Use Dumb Init's entrypoint. ENTRYPOINT ["dumb-init", "--"]
There are two small things that I do want to point out to everyone. First, I still use Python 3.6 as my go-to Python. I am sure I will make the switch soon, but for now this version still seems right to me. Second, I use an application called
dumb-init. Dumb Init has been something that I have been adding to my Docker containers since day one. Maybe we are past the need for it, but I still like the comfort it brings me.
dumb-init is a simple process supervisor and init system designed to run as PID 1 inside minimal container environments (such as Docker). It is deployed as a small, statically-linked binary written in C.
Dockerfile is nothing too special or out-of-the-box. Yet, it sets you up for success for python applications; be it a simple script (like I highlight in this files repo) or a full-fledged web application. Please let me know what you think about this!