0
0
Dockerdevops~5 mins

FROM instruction for base image in Docker - Commands & Configuration

Choose your learning style9 modes available
Introduction
When you build a Docker image, you start from a base image that provides the basic environment. The FROM instruction tells Docker which base image to use, so you don't have to build everything from scratch.
When you want to create a custom application environment starting from a standard Linux system like Ubuntu or Alpine.
When you need to build a container image that includes a specific programming language runtime like Python or Node.js.
When you want to base your image on an official database image like MySQL or Redis to add custom configurations.
When you want to create a multi-stage build to optimize the final image size by using multiple FROM instructions.
When you want to specify a particular version or tag of a base image to ensure consistency across deployments.
Config File - Dockerfile
Dockerfile
FROM python:3.11-slim

WORKDIR /app

COPY . /app

RUN pip install --no-cache-dir -r requirements.txt

CMD ["python", "app.py"]

The FROM line sets the base image to Python 3.11 slim version, which is a lightweight Python environment.

WORKDIR sets the working directory inside the container.

COPY copies your application files into the container.

RUN installs the Python dependencies.

CMD defines the command to run your app when the container starts.

Commands
This command builds a Docker image named 'my-python-app' using the Dockerfile in the current directory. It reads the FROM instruction to start from the Python 3.11 slim base image.
Terminal
docker build -t my-python-app .
Expected OutputExpected
Sending build context to Docker daemon 4.096kB Step 1/6 : FROM python:3.11-slim 3.11-slim: Pulling from library/python Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Status: Downloaded newer image for python:3.11-slim ---> abcdef123456 Step 2/6 : WORKDIR /app ---> Running in 123456abcdef Removing intermediate container 123456abcdef ---> 7890abcd1234 Step 3/6 : COPY . /app ---> abc123def456 Step 4/6 : RUN pip install --no-cache-dir -r requirements.txt ---> Running in def456abc123 Collecting flask Downloading Flask-2.3.2-py3-none-any.whl (100 kB) Installing collected packages: flask Successfully installed flask-2.3.2 Removing intermediate container def456abc123 ---> 456def789abc Step 5/6 : CMD ["python", "app.py"] ---> Running in 789abc456def Removing intermediate container 789abc456def ---> 123abc456def Successfully built 123abc456def Successfully tagged my-python-app:latest
-t - Assigns a name and optionally a tag to the image
This command lists all Docker images on your system, so you can verify that 'my-python-app' was created successfully.
Terminal
docker images
Expected OutputExpected
REPOSITORY TAG IMAGE ID CREATED SIZE my-python-app latest 123abc456def 10 seconds ago 120MB python 3.11-slim abcdef123456 2 days ago 115MB
This command runs a container from the 'my-python-app' image to test that your app starts correctly. The --rm flag removes the container after it stops.
Terminal
docker run --rm my-python-app
Expected OutputExpected
* Serving Flask app 'app' * Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
--rm - Automatically removes the container when it exits
Key Concept

If you remember nothing else from this pattern, remember: the FROM instruction sets the starting point for your Docker image, defining the base environment your app will run in.

Common Mistakes
Using FROM without specifying a valid image name or tag
Docker will fail to build because it cannot find the base image to start from.
Always specify a valid base image name and tag, for example, 'FROM python:3.11-slim'.
Using 'latest' tag implicitly by writing 'FROM python' without a tag
This can lead to unpredictable builds because the 'latest' tag can change over time.
Specify an explicit tag like 'FROM python:3.11-slim' to ensure consistent builds.
Trying to use multiple FROM instructions without understanding multi-stage builds
Only the last FROM stage is used for the final image unless multi-stage build syntax is properly used.
Learn and use multi-stage build syntax properly if you need multiple FROM instructions.
Summary
The FROM instruction sets the base image for your Docker build.
Use docker build to create an image starting from the base image.
Verify the image with docker images and run it with docker run.