Build a Dockerfile
This section will guide you through building a Dockerfile that will be used as part of the integration with Visual Studio Code.
Scenario: Imagine you want to start a new Python-based development project and need to get your development environment setup and ready.
Quote
A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image. Using docker build users can create an automated build that executes several command-line instructions in succession.
A Dockerfile defines how an image is built. Once built, the Docker image is the blueprint that will be used to instantiate an ephemeral instance called a container.
Selecting a Base Image
Typically, the image that you will build for your projects will be based on a foundational image someone else created. There are a significant number of existing images that you can use as the base of your image.
The best approach is to visit Docker Hub and see what images are available based on the focus on your project.
Scenario: Your project is Python-based, so the base image will be one of the available Python images.
There are very simple filtering and searching capabilities on Docker Hub that make it easy to quickly narrow down the options for your base image.
- NAVIGATE to https://hub.docker.com
- CLICK Explore
- CLICK Official Images
- CLICK Programming Languages
- CLICK Python
Feel free to review the available images and read the supporting documentation about the images. This example will utilize a Python base image named slim-buster.
Info
Here are some instructions for building a base image if you so desire: Base Images
Create the Initial Dockerfile
Once you have selected the desired base image you can start to build your Dockerfile for the project. The first line of a Dockerfile is almost always the FROM command. The only other command that can precede FROM is ARG. This section keeps it simple and uses only FROM
- CREATE a new file named Dockerfile in the root of your project directory
- ADD the following first line
FROM python:slim-buster
Providing Meta Data
Using the LABEL command we can include some information about the Dockerfile to increase supportability down the road. The LABEL command allows you to define a series of key and value pairs of attributes.
# Define some meta data
LABEL author="Jeff Andiorio" email="jeff.andiorio@wwt.com"
Installing OS Requirements
There will be many occasions where you will need to add some OS level packages that rely on a package manager for installation. In this case we are on a Debian Linux based system which uses apt as a package manager.
In the Dockerfile you can use the RUN command to provide instructions to perform these package installations. The RUN instruction can be used for executing commands on the target container. This section will use the shell syntax. Check the Docker documentation for more information.
# Update Debian Packages and Install Git
RUN apt-get update && apt-get -y install git
Since this will be our development environment we will need to have git installed in the container.
Create a Working Directory
A Working Directory is set to be the source directory for all subsequent RUN, CMD, COPY, and ADD Dockerfile Instructions. This walk-through will create a /development directory in our container and set it as our working directory
Tip
If the directory doesn't exist it will be created automatically.
- APPEND the
WORKDIRinstruction to theDockerfile
# Set the new directory
WORKDIR /development
Copy Files
Another common need is to copy files into the container. When using the container as a development environment, Visual Studio Code will automatically mount the project directory and make the files available within the container. This relates to files you need to have available in the Docker image (aside from your development repo) like the requirements.txt file, so we can install packages.
Scenario: The python project will require a couple of additional python packages. Create a requirements.txt file and make sure it's available to your Docker image.
-
CREATE a file named
requirements.txtin the project root directory -
ADD the text below to the file
pyaml
requests
flake8
-
SAVE the file
-
APPEND the
COPYinstruction to theDockerfile# Copy requirements.txt into Container COPY requirements.txt /development
Installing Python Requirements
Scenario: Just having the requirements.txt file will not install the required packages. Add the 'RUN' command to the Dockerfile to install your python project requirements.
-
APPEND the
RUNinstruction to theDockerfileto install the python requirements# Install Python Requirements RUN pip install -r requirements.txt
Info
The 'RUN' command above will look for the requirements.txt file in the WORKDIR which is where you copied the file.
Final File
If you have followed all the instructions, your final Dockerfile will look similar to this:
Tip
The LABEL instruction will have your information.
FROM python:slim-buster
# Define some meta data
LABEL author="Jeff Andiorio" email="jeff.andiorio@wwt.com"
# Update Debian Packages and Install Git
RUN apt-get update && apt-get -y install git
# Set the new directory
WORKDIR /development
# Copy requirements.txt into Container
COPY requirements.txt /development
# Install Python Requirements
RUN pip install -r requirements.txt
What's Next
Now that you have the completed Dockerfile created and have successfully utilized several of the basic Dockerfile instructions how can you use that file?

