Bird
Raised Fist0
Dockerdevops~20 mins

Why advanced Compose features matter in Docker - Challenge Your Understanding

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Compose Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Why use Docker Compose override files?

Docker Compose allows using multiple files like docker-compose.yml and docker-compose.override.yml. What is the main benefit of using override files?

AThey let you change or add service settings without modifying the original compose file.
BThey automatically update Docker images to the latest version.
CThey enable running Compose commands without Docker installed.
DThey convert Compose files into Kubernetes manifests.
Attempts:
2 left
💡 Hint

Think about how you can keep your base setup safe while customizing for different environments.

💻 Command Output
intermediate
2:00remaining
Output of 'docker-compose config' with multiple files

Given these two Compose files:

docker-compose.yml:
version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"

docker-compose.override.yml:
version: '3'
services:
  web:
    environment:
      - DEBUG=true

What is the output of docker-compose -f docker-compose.yml -f docker-compose.override.yml config?

AA warning about conflicting versions and no output.
BAn error because multiple files cannot be used with the config command.
COnly the base file content without environment variables.
DA combined configuration showing the web service with image nginx, port 80:80, and environment DEBUG=true.
Attempts:
2 left
💡 Hint

Think about how Compose merges multiple files.

🔀 Workflow
advanced
2:00remaining
Using profiles to control service startup

You want to start only a subset of services defined in your Compose file based on the environment. Which Compose feature helps you do this?

AProfiles allow grouping services and starting only those groups with <code>--profile</code> option.
BUsing multiple Compose files with <code>-f</code> to exclude services.
CManually commenting out services in the Compose file before running.
DSetting environment variables inside the Compose file to disable services.
Attempts:
2 left
💡 Hint

Think about a way to tag services and choose which tags to run.

❓ Troubleshoot
advanced
2:00remaining
Why does 'depends_on' not wait for service readiness?

You use depends_on in your Compose file to start services in order. However, sometimes your app fails because the dependency is not ready. Why?

AThe dependency service must be manually started before the dependent service.
B<code>depends_on</code> only waits for container start, not for the service inside to be ready.
CDocker Compose does not support <code>depends_on</code> in version 3 files.
D<code>depends_on</code> requires a special flag to wait for readiness that is missing.
Attempts:
2 left
💡 Hint

Think about the difference between a container running and the app inside being ready.

✅ Best Practice
expert
2:00remaining
Why use extension fields (&) in Compose files?

In Docker Compose, what is the main advantage of using YAML anchors and extension fields (using & and *)?

AThey automatically convert Compose files to Kubernetes YAML.
BThey enable running Compose files faster by caching repeated sections.
CThey let you reuse and share configuration snippets to avoid repetition and errors.
DThey allow environment variables to be encrypted inside the Compose file.
Attempts:
2 left
💡 Hint

Think about how you avoid copying the same text multiple times.

Practice

(1/5)
1. What is the main benefit of using advanced features in Docker Compose for multi-container applications?
easy
A. They reduce the size of container images.
B. They make containers run faster individually.
C. They simplify managing multiple containers together.
D. They automatically update Docker itself.

Solution

  1. Step 1: Understand Docker Compose purpose

    Docker Compose is designed to manage multiple containers as one app.
  2. Step 2: Identify advanced features role

    Advanced features help organize, scale, and control these containers easily.
  3. Final Answer:

    They simplify managing multiple containers together. -> Option C
  4. Quick Check:

    Advanced Compose features = Simplify multi-container management [OK]
Hint: Think: Compose = managing many containers easily [OK]
Common Mistakes:
  • Confusing image size with Compose features
  • Thinking Compose speeds up single containers
  • Assuming Compose updates Docker engine
2. Which of the following is the correct syntax to scale a service named web to 3 instances using Docker Compose CLI?
easy
A. docker-compose scale web 3
B. docker-compose start web -n 3
C. docker-compose run --scale web 3
D. docker-compose up --scale web=3

Solution

  1. Step 1: Recall Docker Compose scale syntax

    The correct command to scale is: docker-compose up --scale servicename=number
  2. Step 2: Match options with correct syntax

    docker-compose up --scale web=3 matches this syntax exactly.
  3. Final Answer:

    docker-compose up --scale web=3 -> Option D
  4. Quick Check:

    Scaling uses 'up --scale' syntax [OK]
Hint: Use 'docker-compose up --scale service=num' to scale [OK]
Common Mistakes:
  • Using 'scale' as a separate command
  • Confusing 'run' with 'up' for scaling
  • Using 'start' which doesn't support scaling
3. Given this snippet in a docker-compose.yml file:
services:
  app:
    image: myapp
    deploy:
      replicas: 2
      resources:
        limits:
          cpus: '0.5'
          memory: 512M

What will happen when you run docker stack deploy -c docker-compose.yml mystack?
medium
A. The command fails because deploy is not supported in Compose.
B. Two app containers start with CPU limited to 0.5 and 512MB memory each.
C. Only one app container starts ignoring resource limits.
D. Two app containers start but without any resource limits.

Solution

  1. Step 1: Understand 'deploy' in Compose for Swarm

    The 'deploy' section is used by Docker Swarm to set replicas and resource limits.
  2. Step 2: Analyze command effect

    Running 'docker stack deploy' uses Swarm mode, so it respects 'replicas' and 'resources' limits.
  3. Final Answer:

    Two app containers start with CPU limited to 0.5 and 512MB memory each. -> Option B
  4. Quick Check:

    'deploy' works with 'docker stack deploy' = resource limits applied [OK]
Hint: Use 'docker stack deploy' to apply 'deploy' settings [OK]
Common Mistakes:
  • Thinking 'deploy' works with 'docker-compose up'
  • Assuming only one container starts despite replicas
  • Believing resource limits are ignored in Swarm
4. You wrote this docker-compose.yml snippet:
services:
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: mypass
    ports:
      - "5432:5432"
    deploy:
      replicas: 2

When running docker-compose up, only one db container starts. Why?
medium
A. The 'deploy' section is ignored by 'docker-compose up'.
B. You must specify replicas in 'docker-compose up' command.
C. Postgres image does not support multiple replicas.
D. Port mapping conflicts prevent multiple containers.

Solution

  1. Step 1: Understand 'deploy' section scope

    The 'deploy' key is only used by Docker Swarm, not by 'docker-compose up'.
  2. Step 2: Explain why only one container starts

    'docker-compose up' ignores 'deploy', so it starts one container by default.
  3. Final Answer:

    The 'deploy' section is ignored by 'docker-compose up'. -> Option A
  4. Quick Check:

    'deploy' ignored by 'docker-compose up' = one container [OK]
Hint: 'deploy' works only with Swarm, not 'docker-compose up' [OK]
Common Mistakes:
  • Thinking 'docker-compose up' can scale with 'deploy'
  • Assuming port conflicts cause single container
  • Believing image limits replicas
5. You want to deploy a web app with a database using Docker Compose. You need to:
- Scale the web service to 4 instances
- Limit each web container to 1 CPU and 1GB RAM
- Ensure the database runs only once with persistent storage

Which Compose features help you achieve this setup?
hard
A. Use 'deploy.replicas' and 'deploy.resources.limits' for web; use volumes for DB persistence.
B. Use 'scale' in 'docker-compose up' for DB; use 'deploy' for web resource limits.
C. Use environment variables to limit CPU and RAM; scale DB with 'deploy.replicas'.
D. Use 'depends_on' to scale web; use 'ports' to limit DB resources.

Solution

  1. Step 1: Identify scaling and resource control for web

    Use 'deploy.replicas' to scale web to 4 and 'deploy.resources.limits' to limit CPU and RAM.
  2. Step 2: Ensure single DB instance with persistence

    Set DB replicas to 1 and use volumes to keep data persistent.
  3. Final Answer:

    Use 'deploy.replicas' and 'deploy.resources.limits' for web; use volumes for DB persistence. -> Option A
  4. Quick Check:

    Scaling + resource limits + volumes = Use 'deploy.replicas' and 'deploy.resources.limits' for web; use volumes for DB persistence. [OK]
Hint: 'deploy' controls scale and limits; volumes keep DB data safe [OK]
Common Mistakes:
  • Trying to scale DB instead of web
  • Using environment variables for resource limits
  • Confusing 'depends_on' with scaling or resource control
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard