📖 Scenario: You are working on a small web project that uses Docker Compose to manage services. You want to build a custom Docker image for your web service using a Dockerfile.
🎯 Goal: Learn how to define a Docker Compose file that builds a Docker image from a Dockerfile and runs a container from that image.
📋 What You'll Learn
Create a Dockerfile with a simple base image
Create a docker-compose.yml file that builds the image from the Dockerfile
Define a service in Compose that uses the built image
Run the Compose setup and verify the container runs
💡 Why This Matters
🌍 Real World
Building images in Compose is common when you want to customize your app environment and easily run multiple services together.
💼 Career
DevOps engineers and developers use Docker Compose to manage multi-container applications and automate image builds.
Progress0 / 4 steps
1
Create a Dockerfile
Create a file named Dockerfile with these exact contents: FROM alpine:latest CMD ["echo", "Hello from custom image"]
Docker
Hint
The Dockerfile must start with FROM alpine:latest and end with CMD ["echo", "Hello from custom image"].
2
Create docker-compose.yml with build config
Create a file named docker-compose.yml with a service called web that builds the image from the current directory using the build key.
Docker
Hint
The Compose file must have services: with a web: service that uses build: . to build from the current folder.
3
Add ports mapping to the service
In the docker-compose.yml file, add a ports section under the web service that maps port 8080 on the host to port 80 in the container.
Docker
Hint
Indent the ports: section under web: and add - "8080:80" to map ports.
4
Run docker-compose and show container output
Run docker-compose up --build --abort-on-container-exit in the terminal to build the image and start the container. Then, write a command to display the container logs using docker-compose logs web.
Docker
Hint
Use docker-compose up --build --abort-on-container-exit to build and run, then docker-compose logs web to see the output.
Practice
(1/5)
1. What does the build key do in a Docker Compose file?
easy
A. It sets the network mode for the container.
B. It runs a container from an existing image.
C. It specifies environment variables for the container.
D. It tells Compose how to build a Docker image from a directory or Dockerfile.
Solution
Step 1: Understand the role of build in Compose
The build key tells Docker Compose to create an image from source files, usually by specifying a directory with a Dockerfile.
Step 2: Compare with other keys
Other keys like image specify existing images, and environment sets variables, so they do not build images.
Final Answer:
It tells Compose how to build a Docker image from a directory or Dockerfile. -> Option D
Quick Check:
build = build image [OK]
Hint: Remember: build = create image from source [OK]
Common Mistakes:
Confusing build with image key
Thinking build runs containers
Mixing build with environment variables
2. Which of the following is the correct syntax to specify a custom Dockerfile in a Compose service?
easy
A. build: ./app
dockerfile: Dockerfile.custom
B. build:
path: ./app
file: Dockerfile.custom
C. build:
context: ./app
dockerfile: Dockerfile.custom
D. build:
source: ./app
file: Dockerfile.custom
Solution
Step 1: Recall correct keys under build
The correct keys are context for directory and dockerfile for custom Dockerfile name.
Step 2: Check each option
build:
context: ./app
dockerfile: Dockerfile.custom uses context and dockerfile correctly. Others use invalid keys like path, file, or source.
Final Answer:
build:
context: ./app
dockerfile: Dockerfile.custom -> Option C
Quick Check:
Use context and dockerfile keys [OK]
Hint: Use 'context' and 'dockerfile' keys exactly [OK]
Common Mistakes:
Using 'path' or 'file' instead of 'context' and 'dockerfile'
When running docker compose build, you get an error. What is wrong?
medium
A. You must specify context instead of build.
B. The dockerfile key must be inside the build block, not at the same level.
C. The build key cannot be a string; it must be a dictionary.
D. Docker Compose does not support custom Dockerfile names.
Solution
Step 1: Check Compose syntax for build and dockerfile
The dockerfile key must be nested inside the build dictionary, not at the same level as build.
Step 2: Identify the error cause
Here, build is a string, and dockerfile is separate, causing Compose to fail parsing.
Final Answer:
The dockerfile key must be inside the build block, not at the same level. -> Option B
Quick Check:
dockerfile inside build block [OK]
Hint: Put dockerfile under build, not beside it [OK]
Common Mistakes:
Placing dockerfile outside build block
Using build as string with dockerfile key separately
Assuming dockerfile key is global
5. You want to build two services in Compose, frontend and backend, each with different Dockerfiles in the same directory ./app. How do you configure the build section for both services correctly?
hard
A. Use context: ./app for both, and specify different dockerfile names under each service's build.
B. Use different context paths for each service pointing to the same directory.
C. Use one service with build and the other with image only.
D. You cannot build two images from the same directory with different Dockerfiles.
Solution
Step 1: Understand build context and dockerfile usage
You can use the same context directory but specify different dockerfile names to build different images from the same folder.
Step 2: Check options for multiple services
Use context: ./app for both, and specify different dockerfile names under each service's build. correctly uses the same context with different Dockerfiles. Use different context paths for each service pointing to the same directory. is redundant, C limits building, and D is false.
Final Answer:
Use context: ./app for both, and specify different dockerfile names under each service's build. -> Option A
Quick Check:
Same context + different dockerfile names [OK]
Hint: Same folder, different dockerfile names per service [OK]
Common Mistakes:
Trying to use different contexts for same folder
Thinking multiple Dockerfiles in one folder is unsupported
Not specifying dockerfile key for each service
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.