Docker Compose — Installation Exercises

2 minute read

Practice what you’ve learned in the Installation chapter. These exercises cover verifying your setup, file naming, and project names.


Exercise 1 — Verify Your Installation

Task: Run three commands to verify your Docker Compose installation is working. What commands would you use and what output do you expect?

Show Answer
# 1. Check Compose version
docker compose version
# Expected: Docker Compose version v2.24.0 (or higher)

# 2. Check Docker Engine
docker info --format '{{.ServerVersion}}'
# Expected: 24.0.7 (or higher)

# 3. Run a test
mkdir -p /tmp/test-compose && cd /tmp/test-compose
cat > compose.yml << 'EOF'
services:
  test:
    image: alpine
    command: echo "It works!"
EOF
docker compose up
# Expected: "It works!" in output
docker compose down
rm -rf /tmp/test-compose

Exercise 2 — File Naming Priority

Question: You have a directory with these files:

myproject/
├── compose.yml
├── compose.yaml
├── docker-compose.yml
└── docker-compose.yaml

Which file will docker compose up use? What if you delete compose.yml?

Show Answer
  1. docker compose up will use compose.yml — it has the highest priority
  2. If you delete compose.yml, it will use compose.yaml — second in priority

Priority order: compose.yml → compose.yaml → docker-compose.yml → docker-compose.yaml


Exercise 3 — Project Naming

Question: Given these scenarios, what will the project name be?

  1. Directory: /home/user/my-blog/, no name: key, no -p flag
  2. Directory: /home/user/my-blog/, compose.yml has name: wordpress
  3. Directory: /home/user/my-blog/, running docker compose -p production up
  4. Directory: /home/user/my-blog/, COMPOSE_PROJECT_NAME=staging is set
Show Answer
  1. my-blog — defaults to directory name
  2. wordpress — name: key overrides directory name
  3. production — -p flag has highest priority
  4. staging — env var overrides directory name and name: key

Priority: -p flag > COMPOSE_PROJECT_NAME env var > name: key > directory name


Exercise 4 — Custom File

Task: Write the command to:

  1. Start a stack using compose.prod.yml
  2. Start a stack using both compose.yml and compose.prod.yml
  3. Start a stack with project name “production” using compose.prod.yml
Show Answer
# 1. Single custom file
docker compose -f compose.prod.yml up -d

# 2. Multiple files (merged in order)
docker compose -f compose.yml -f compose.prod.yml up -d

# 3. Custom file with custom project name
docker compose -p production -f compose.prod.yml up -d

Exercise 5 — Compose CLI

Question: For each task, write the Compose command:

  1. List all running compose projects
  2. View help for the up command
  3. Check which containers are running in the current project
  4. Follow logs for a service called api
  5. Open a shell in a running container called db
Show Answer
# 1. List all projects
docker compose ls

# 2. Help for up command
docker compose up --help

# 3. List containers
docker compose ps

# 4. Follow api logs
docker compose logs -f api

# 5. Shell into db
docker compose exec db sh