📖 Scenario: You are creating a Docker container for a simple Python application. To keep the container small and efficient, you want to choose a small base image.Small base images help your containers start faster and use less disk space, just like packing only the essentials for a trip instead of everything you own.
🎯 Goal: Build a Dockerfile that uses a small base image (python:3.12-alpine) to run a simple Python script.
📋 What You'll Learn
Create a Dockerfile starting with the python:3.12-alpine base image
Add a working directory /app
Copy a Python script named app.py into the container
Run the Python script using the CMD instruction
💡 Why This Matters
🌍 Real World
Small base images help developers create fast, efficient containers that use less disk space and bandwidth. This is important when deploying applications in the cloud or on limited resources.
💼 Career
Knowing how to choose and use small base images is a key skill for DevOps engineers and developers working with containerized applications.
Progress0 / 4 steps
1
Create the base Dockerfile with the alpine image
Create a Dockerfile that starts with the base image python:3.12-alpine using the FROM instruction.
Docker
Hint
Use the FROM keyword followed by python:3.12-alpine to specify the base image.
2
Set the working directory and copy the Python script
Add a WORKDIR instruction to set the working directory to /app. Then add a COPY instruction to copy app.py from your local folder to the container's /app directory.
Docker
Hint
Use WORKDIR /app to set the folder inside the container. Use COPY app.py /app/ to copy the file.
3
Add the command to run the Python script
Add a CMD instruction to run the Python script app.py using python.
Docker
Hint
Use CMD ["python", "app.py"] to run the script when the container starts.
4
Build and run the Docker container
Write the command to build the Docker image named small-python-app from the current directory. Then write the command to run the container from this image.
Docker
Hint
Use docker build -t small-python-app . to build and docker run small-python-app to run.
Practice
(1/5)
1. Why do developers often choose small base images like alpine or slim when building Docker containers?
easy
A. To reduce image size and speed up container startup
B. To increase the number of installed packages by default
C. To make the container run only on Windows systems
D. To disable networking inside the container
Solution
Step 1: Understand the purpose of small base images
Small base images like alpine or slim are designed to be lightweight, which means they have fewer files and smaller size.
Step 2: Connect size to performance
Smaller images download faster and start containers quicker, improving efficiency.
Final Answer:
To reduce image size and speed up container startup -> Option A
Quick Check:
Small base images = smaller size and faster startup [OK]
Hint: Small images mean faster downloads and startups [OK]
Common Mistakes:
Thinking small images have more packages by default
Assuming small images restrict OS compatibility
Believing small images disable networking
2. Which of the following is the correct way to specify the Alpine base image in a Dockerfile?
easy
A. IMAGE alpine:latest
B. FROM alpine/latest
C. BASE alpine:latest
D. FROM alpine:latest
Solution
Step 1: Recall Dockerfile syntax for base images
The correct keyword to specify a base image is FROM, followed by the image name and tag separated by a colon.
Step 2: Check each option
FROM alpine:latest uses FROM alpine:latest, which is correct syntax. Options A, B, and C use incorrect keywords or separators.
Final Answer:
FROM alpine:latest -> Option D
Quick Check:
Base image syntax = FROM image:tag [OK]
Hint: Use FROM keyword with colon-separated tag [OK]
Common Mistakes:
Using slash instead of colon between image and tag
Using BASE or IMAGE instead of FROM
Omitting the tag separator
3. Given this Dockerfile snippet:
FROM python:3.12-alpine
RUN python --version
What will be the expected output when building this image?
medium
A. Python 3.12.x (Alpine variant)
B. Error: python command not found
C. Python 2.7.x default version
D. No output, build fails silently
Solution
Step 1: Identify the base image and its contents
The base image is python:3.12-alpine, which includes Python 3.12 installed on Alpine Linux.
Step 2: Understand the RUN command effect
The command python --version will print the Python version installed in the image during build.
Final Answer:
Python 3.12.x (Alpine variant) -> Option A
Quick Check:
python:3.12-alpine includes Python 3.12 [OK]
Hint: Tagged python alpine images include Python by default [OK]
Common Mistakes:
Assuming python is missing in alpine variant
Confusing Python 2 with Python 3
Expecting silent build without output
4. You wrote this Dockerfile:
FROM node:18-slim
RUN apk add curl
But the build fails with "apk: command not found". What is the problem?
medium
A. You must install curl before FROM statement
B. Node 18-slim image does not support RUN commands
C. The slim image uses apt, not apk, so apk command is missing
D. The command should be RUN apt-get add curl
Solution
Step 1: Identify the base image OS
The node:18-slim image is based on Debian, which uses apt package manager, not apk.
Step 2: Understand the error cause
Using apk (Alpine package manager) on Debian-based image causes "command not found" error.
Final Answer:
The slim image uses apt, not apk, so apk command is missing -> Option C
Quick Check:
Debian slim uses apt, not apk [OK]
Hint: Use apt on slim (Debian), apk on alpine [OK]
Common Mistakes:
Trying apk on Debian-based images
Placing RUN commands before FROM
Using unsupported RUN syntax
5. You want a small Docker image for a Python app but need some common Linux tools like curl and bash. Which base image choice balances size and compatibility best?
hard
A. python:3.12-alpine (smallest but may need extra setup)
B. python:3.12-slim (slightly larger but includes common tools)
C. python:3.12-full (largest, includes all tools by default)
D. python:3.12-minimal (no tools, smallest size)
Solution
Step 1: Compare alpine and slim images
Alpine is smallest but often lacks common tools, requiring manual installs. Slim is bigger but includes many common Linux utilities.
Step 2: Match needs to image choice
Since you need tools like curl and bash, slim is a better balance of size and compatibility than alpine.
Final Answer:
python:3.12-slim (slightly larger but includes common tools) -> Option B
Quick Check:
Slim balances size and tools better than alpine [OK]
Hint: Choose slim for tools, alpine for smallest size [OK]
Common Mistakes:
Picking alpine without adding needed tools
Assuming minimal includes tools
Choosing full image without size concern
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.