Bird
Raised Fist0
Dockerdevops~5 mins

Docker Compose for dev environment - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is Docker Compose used for in a development environment?
Docker Compose helps you run and manage multiple containers together easily. It lets you define all your app's services in one file and start them with a single command.
Click to reveal answer
beginner
What file does Docker Compose use to define services?
Docker Compose uses a docker-compose.yml file where you list all your containers, their settings, networks, and volumes.
Click to reveal answer
beginner
How do you start all services defined in a Docker Compose file?
Run the command docker compose up in the folder with your docker-compose.yml. It builds and starts all containers together.
Click to reveal answer
intermediate
Why use volumes in Docker Compose for development?
Volumes let you share code between your computer and the container. This means you can edit files on your computer and see changes immediately inside the container.
Click to reveal answer
beginner
What is the benefit of using Docker Compose over running individual Docker commands?
Docker Compose saves time by managing multiple containers with one file and command. It also keeps your setup organized and easy to share with others.
Click to reveal answer
Which file do you edit to define services in Docker Compose?
ADockerfile
Bdocker-compose.yml
Cdocker.config
Dcompose.json
What command starts all services in Docker Compose?
Adocker compose up
Bdocker compose start
Cdocker run compose
Ddocker build compose
Why are volumes useful in a dev environment with Docker Compose?
AThey speed up container startup
BThey reduce container size
CThey allow code changes on host to reflect inside containers immediately
DThey secure the container network
Which of these is NOT a benefit of Docker Compose?
AManage multiple containers with one command
BDefine container setup in one file
CEasily share environment setup
DAutomatically write application code
In Docker Compose, how do you stop and remove containers, networks, and volumes created by docker compose up?
Adocker compose down
Bdocker compose remove
Cdocker compose stop
Ddocker compose clean
Explain how Docker Compose helps in setting up a development environment with multiple services.
Think about how you would run many containers together without typing many commands.
You got /4 concepts.
    Describe the role of volumes in Docker Compose for development and why they are important.
    Consider how you want to edit code on your computer and see it run inside the container without delays.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using docker-compose.yml in a development environment?
      easy
      A. To build Docker images only
      B. To define and run multiple containers with one command
      C. To replace Docker CLI commands completely
      D. To monitor container resource usage

      Solution

      1. Step 1: Understand Docker Compose role

        Docker Compose uses a YAML file to define multiple containers and their settings.
      2. Step 2: Identify main benefit in dev

        It allows running all containers together with a single command, simplifying setup.
      3. Final Answer:

        To define and run multiple containers with one command -> Option B
      4. Quick Check:

        Compose = multiple containers, one command [OK]
      Hint: Compose runs many containers with one file and command [OK]
      Common Mistakes:
      • Thinking Compose only builds images
      • Believing Compose replaces all Docker CLI commands
      • Confusing Compose with monitoring tools
      2. Which of the following is the correct syntax to expose port 8080 on the host mapped to port 80 in a docker-compose.yml service?
      easy
      A. ports: - "80:8080"
      B. expose: - "80:8080"
      C. expose: - "8080:80"
      D. ports: - "8080:80"

      Solution

      1. Step 1: Understand ports syntax in Compose

        The format is "host_port:container_port" to map host port to container port.
      2. Step 2: Match ports for host 8080 to container 80

        To expose container port 80 on host port 8080, use "8080:80" under ports.
      3. Final Answer:

        ports: - "8080:80" -> Option D
      4. Quick Check:

        HostPort:ContainerPort = 8080:80 [OK]
      Hint: Ports use host:container format [OK]
      Common Mistakes:
      • Reversing host and container ports
      • Using expose instead of ports for host mapping
      • Incorrect YAML indentation
      3. Given this docker-compose.yml snippet, what will be the effect of the volume configuration?
      services:
        app:
          image: myapp
          volumes:
            - ./src:/app/src
      medium
      A. The host's ./src folder is shared with /app/src inside the container
      B. The container's /app/src folder is copied to host's ./src folder once
      C. The container will have an empty /app/src folder
      D. The volume will cause a syntax error

      Solution

      1. Step 1: Understand volume syntax in Compose

        Format "host_path:container_path" mounts host folder inside container.
      2. Step 2: Analyze given volume mapping

        Host folder ./src is mounted to container path /app/src, sharing files live.
      3. Final Answer:

        The host's ./src folder is shared with /app/src inside the container -> Option A
      4. Quick Check:

        Volume mount = host folder shared inside container [OK]
      Hint: Volumes share host folder inside container path [OK]
      Common Mistakes:
      • Thinking volume copies files only once
      • Confusing source and target paths
      • Assuming volume creates empty folder
      4. You wrote this docker-compose.yml but get an error when running docker-compose up. What is wrong?
      services:
        web:
          image: nginx
          ports:
            - "80:80"
          volumes:
            - ./html:/usr/share/nginx/html
          environment:
            - DEBUG=true
          command: nginx -g 'daemon off;'
          restart: always
        db:
          image: postgres
          environment:
            POSTGRES_PASSWORD: example
          volumes:
            - pgdata:/var/lib/postgresql/data
      volumes:
        pgdata:
      medium
      A. The environment variable for db should use list syntax or key-value mapping consistently
      B. The volume pgdata is not defined properly under volumes
      C. The command for web service is invalid
      D. The environment variable for db uses wrong syntax, should be a list

      Solution

      1. Step 1: Inspect YAML syntax in command field

        The command: nginx -g 'daemon off;' lacks quotes around the full string, causing YAML to parse it as separate unquoted scalars, leading to a syntax error.
      2. Step 2: Confirm other sections are valid

        Environment uses valid list/map styles (mixed OK), volumes properly defined.
      3. Final Answer:

        The command for web service is invalid -> Option C
      4. Quick Check:

        Multi-word command needs full quotes or YAML list [OK]
      Hint: YAML command with spaces: quote whole or use list [OK]
      Common Mistakes:
      • Blaming environment syntax mixing (both styles valid)
      • Misreading pgdata volume definition
      • Overlooking unquoted multi-word command
      5. You want to set up a development environment with a web app and a database using Docker Compose. The web app needs live code updates from your host machine, and the database should persist data between restarts. Which docker-compose.yml configuration correctly achieves this?
      hard
      A. services: web: image: mywebapp volumes: - ./code:/app ports: - "3000:3000" db: image: mysql environment: MYSQL_ROOT_PASSWORD: rootpass volumes: - dbdata:/var/lib/mysql volumes: dbdata:
      B. services: web: image: mywebapp ports: - "3000:3000" db: image: mysql environment: MYSQL_ROOT_PASSWORD: rootpass volumes: dbdata: driver: local
      C. services: web: image: mywebapp volumes: - /app:/code ports: - "3000:3000" db: image: mysql environment: MYSQL_ROOT_PASSWORD: rootpass volumes: - dbdata:/var/lib/mysql volumes: dbdata:
      D. services: web: image: mywebapp volumes: - ./code:/app ports: - "3000:3000" db: image: mysql environment: MYSQL_ROOT_PASSWORD: rootpass

      Solution

      1. Step 1: Ensure live code updates for web app

        Mount host folder ./code to container /app using volumes for live updates.
      2. Step 2: Ensure database data persistence

        Use a named volume (dbdata) mounted to /var/lib/mysql to keep data between restarts.
      3. Step 3: Check ports and environment

        Expose port 3000 for web and set MYSQL_ROOT_PASSWORD for db environment.
      4. Final Answer:

        Configuration with volumes for web and named volume for db -> Option A
      5. Quick Check:

        Volumes for live code and persistent db = services: web: image: mywebapp volumes: - ./code:/app ports: - "3000:3000" db: image: mysql environment: MYSQL_ROOT_PASSWORD: rootpass volumes: - dbdata:/var/lib/mysql volumes: dbdata: [OK]
      Hint: Use volumes for code and named volume for DB persistence [OK]
      Common Mistakes:
      • Not mounting host code folder for live updates
      • Missing volume for database persistence
      • Incorrect volume paths or missing volumes section
      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