Bird
Raised Fist0
Dockerdevops~5 mins

docker-compose.yml structure - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the version key in a docker-compose.yml file?
The version key specifies the Compose file format version. It tells Docker Compose which syntax rules to follow when reading the file.
Click to reveal answer
beginner
What does the services section define in a docker-compose.yml file?
The services section lists all the containers (services) that Docker Compose will create and manage. Each service has its own configuration like image, ports, and environment variables.
Click to reveal answer
intermediate
In docker-compose.yml, what is the role of the volumes key under a service?
The volumes key connects storage from the host machine or named volumes to the container, allowing data to persist or be shared between containers.
Click to reveal answer
beginner
How do you specify which ports to expose from a container in docker-compose.yml?
Use the ports key under a service. It maps host ports to container ports in the format host_port:container_port.
Click to reveal answer
beginner
What is the purpose of the environment section in a docker-compose.yml service?
The environment section sets environment variables inside the container. These variables can configure the app or service running inside.
Click to reveal answer
Which key in docker-compose.yml defines the containers to run?
Avolumes
Bnetworks
Cservices
Dimages
How do you map port 8080 on your computer to port 80 in the container?
Aports: - "8080:80"
Bports: - "80"
Cports: - "8080"
Dports: - "80:8080"
What does the volumes key do in a service definition?
ASets environment variables
BConnects storage between host and container
CDefines network settings
DSpecifies container image
Where do you specify environment variables for a container in docker-compose.yml?
Aunder <code>environment</code> key
Bunder <code>ports</code> key
Cunder <code>volumes</code> key
Dunder <code>networks</code> key
What is the correct file format for docker-compose.yml?
AJSON
BXML
CINI
DYAML
Describe the main sections of a docker-compose.yml file and their purposes.
Think about what each part controls in running containers.
You got /5 concepts.
    Explain how you would expose a web app running on port 80 inside a container to port 3000 on your computer using docker-compose.yml.
    Remember the format is host_port:container_port.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of the services section in a docker-compose.yml file?
      easy
      A. To define the containers that will run and their settings
      B. To specify the Docker version to use
      C. To list the volumes to be created
      D. To set environment variables globally

      Solution

      1. Step 1: Understand the role of services

        The services section lists all containers to run and their configurations.
      2. Step 2: Compare with other sections

        version sets compose file version, volumes defines shared storage, environment variables are per service or global but not the main purpose of services.
      3. Final Answer:

        To define the containers that will run and their settings -> Option A
      4. Quick Check:

        services = container definitions [OK]
      Hint: Services section lists containers and their configs [OK]
      Common Mistakes:
      • Confusing version with services
      • Thinking volumes are defined inside services only
      • Assuming environment variables are global by default
      2. Which of the following is the correct way to specify a port mapping in docker-compose.yml under a service named web?
      easy
      A. port: - "80:80"
      B. ports: - "80:80"
      C. ports: - 80:80
      D. mapping: - "80:80"

      Solution

      1. Step 1: Check correct key for port mapping

        The correct key is ports (plural), not port or mapping.
      2. Step 2: Validate syntax for port mapping

        Port mappings must be strings with quotes like "80:80" to avoid YAML parsing issues.
      3. Final Answer:

        ports: - "80:80" -> Option B
      4. Quick Check:

        Use ports with quoted strings [OK]
      Hint: Use 'ports' key with quoted strings for mappings [OK]
      Common Mistakes:
      • Using singular 'port' instead of 'ports'
      • Not quoting port mappings causing YAML errors
      • Using wrong key like 'mapping'
      3. Given this docker-compose.yml snippet:
      version: '3'
      services:
        app:
          image: myapp:latest
          environment:
            - DEBUG=true
          ports:
            - "5000:5000"
      
      What will happen when you run docker-compose up?
      medium
      A. The container runs but port 5000 is not exposed
      B. An error occurs because environment variables must be in key:value format
      C. The image 'myapp:latest' is ignored and default image is used
      D. A container named 'app' runs with DEBUG=true and port 5000 exposed

      Solution

      1. Step 1: Analyze environment variable format

        Environment variables can be listed as strings like "DEBUG=true" in docker-compose.yml.
      2. Step 2: Check port mapping and image usage

        Port 5000 is correctly mapped and image 'myapp:latest' will be used to run the container.
      3. Final Answer:

        A container named 'app' runs with DEBUG=true and port 5000 exposed -> Option D
      4. Quick Check:

        Env vars as strings and ports mapped = container runs correctly [OK]
      Hint: Env vars as strings and ports quoted work fine [OK]
      Common Mistakes:
      • Thinking environment variables must be key:value pairs
      • Assuming ports need special syntax to expose
      • Believing image name is ignored if not official
      4. Identify the error in this docker-compose.yml snippet:
      version: '3'
      services:
        db:
          image: postgres
          ports:
            - 5432:5432
          environment:
            POSTGRES_PASSWORD: example
      
      medium
      A. Port mapping should be quoted strings like "5432:5432"
      B. Environment variables must be listed as a sequence, not mapping
      C. The version '3' is invalid and should be '3.8'
      D. The image name 'postgres' must include a tag

      Solution

      1. Step 1: Check port mapping syntax

        Port mappings should be quoted strings like "5432:5432" to avoid YAML parsing errors.
      2. Step 2: Validate environment variable format

        Environment variables can be mappings like POSTGRES_PASSWORD: example, which is correct here.
      3. Final Answer:

        Port mapping should be quoted strings like "5432:5432" -> Option A
      4. Quick Check:

        Port mappings need quotes to parse correctly [OK]
      Hint: Always quote port mappings to avoid YAML errors [OK]
      Common Mistakes:
      • Not quoting port mappings
      • Confusing environment variable formats
      • Thinking version '3' is invalid
      5. You want to run two services, web and db, where web depends on db. Which docker-compose.yml snippet correctly expresses this dependency and shares a volume named data between them?
      hard
      A. version: '3' services: web: image: webapp depends_on: - db db: image: postgres volumes: data: external: true
      B. version: '3' services: web: image: webapp volumes: - data:/var/www/data db: image: postgres depends_on: - web volumes: - data:/var/lib/postgresql/data volumes: data:
      C. version: '3' services: web: image: webapp depends_on: - db volumes: - data:/var/www/data db: image: postgres volumes: - data:/var/lib/postgresql/data volumes: data:
      D. version: '3' services: web: image: webapp depends_on: - db volumes: - /data:/var/www/data db: image: postgres volumes: - /data:/var/lib/postgresql/data

      Solution

      1. Step 1: Check dependency declaration

        web depends on db using depends_on with - db under web.
      2. Step 2: Verify volume sharing and declaration

        Both services use the named volume data mapped to their paths, and volumes: section declares data properly.
      3. Final Answer:

        version: '3' services: web: image: webapp depends_on: - db volumes: - data:/var/www/data db: image: postgres volumes: - data:/var/lib/postgresql/data volumes: data: -> Option C
      4. Quick Check:

        depends_on + named volume declared under volumes = correct [OK]
      Hint: Use depends_on and declare shared volumes under volumes [OK]
      Common Mistakes:
      • Reversing depends_on order
      • Using host paths instead of named volumes
      • Not declaring volumes section for named volumes
      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