Bird
Raised Fist0
Microservicessystem_design~5 mins

Docker Compose for local development in Microservices - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is Docker Compose and why is it useful for local development?
Docker Compose is a tool that lets you define and run multiple containers as a single service using a simple file. It helps developers start all parts of their app with one command, making local development easier and faster.
Click to reveal answer
beginner
What file format does Docker Compose use to define services?
Docker Compose uses a YAML file, usually named docker-compose.yml, to describe the services, networks, and volumes needed for the application.
Click to reveal answer
intermediate
How does Docker Compose help manage dependencies between microservices during local development?
Docker Compose allows you to specify service dependencies so containers start in the right order. It also creates a shared network so services can easily communicate by name.
Click to reveal answer
intermediate
What is the purpose of volumes in Docker Compose for local development?
Volumes let you share files between your computer and containers. This means you can edit code on your machine and see changes immediately inside the container without rebuilding.
Click to reveal answer
intermediate
Name one best practice when using Docker Compose for local development.
One best practice is to keep the docker-compose.yml simple and use environment variables for configuration. This makes it easier to switch between local and production setups.
Click to reveal answer
What command starts all services defined in a Docker Compose file?
Adocker run
Bdocker-compose up
Cdocker build
Ddocker start
Which file extension is used for Docker Compose configuration?
A.json
B.xml
C.yml or .yaml
D.txt
How does Docker Compose allow services to communicate with each other?
ABy creating a shared network where services can use service names
BBy exposing ports to the internet
CBy copying files between containers
DBy using environment variables only
What is the benefit of using volumes in Docker Compose during development?
ATo increase container CPU usage
BTo secure containers from outside access
CTo speed up container startup time
DTo share code changes instantly between host and container
Which of these is a recommended practice for Docker Compose files?
AUse environment variables for flexible configuration
BAvoid using networks
CRun all services as root user
DHardcode all configuration values inside the file
Explain how Docker Compose simplifies running multiple microservices locally.
Think about how you would start many apps on your computer with one click.
You got /4 concepts.
    Describe the role of volumes and networks in Docker Compose for local development.
    Consider how your apps share data and connect on your computer.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using Docker Compose in local development for microservices?
      easy
      A. To replace the need for writing application code
      B. To run multiple microservices together easily on a single machine
      C. To deploy microservices directly to production servers
      D. To monitor live traffic of microservices in production

      Solution

      1. Step 1: Understand Docker Compose's role

        Docker Compose is designed to help developers run multiple services together locally using a simple configuration file.
      2. Step 2: Differentiate local development from production

        It is not meant for production deployment or monitoring but for easy local setup and testing.
      3. Final Answer:

        To run multiple microservices together easily on a single machine -> Option B
      4. Quick Check:

        Docker Compose = local multi-service setup [OK]
      Hint: Docker Compose is for local multi-service running [OK]
      Common Mistakes:
      • Confusing Docker Compose with production deployment tools
      • Thinking it replaces writing application code
      • Assuming it monitors live production traffic
      2. Which of the following is the correct syntax to define a service named web in a docker-compose.yml file?
      easy
      A. service: web: image: nginx
      B. containers: web: image: nginx
      C. services: - web: image: nginx
      D. services: web: image: nginx

      Solution

      1. Step 1: Identify the correct top-level key

        The correct key to define multiple services is services, not service or containers.
      2. Step 2: Check service definition syntax

        Services are defined as keys under services, not as list items with dashes.
      3. Final Answer:

        services: web: image: nginx -> Option D
      4. Quick Check:

        Correct YAML key for services = services [OK]
      Hint: Services go under 'services:' key without dashes [OK]
      Common Mistakes:
      • Using 'service' instead of 'services'
      • Defining services as list items with dashes
      • Using 'containers' instead of 'services'
      3. Given this docker-compose.yml snippet:
      services:
        db:
          image: postgres
          ports:
            - "5432:5432"
        api:
          build: ./api
          depends_on:
            - db
          ports:
            - "8000:8000"

      What happens when you run docker-compose up?
      medium
      A. Both db and api services start, with api waiting for db to be ready
      B. api starts first, then db starts after
      C. Only db service starts, api is ignored
      D. Both services start but ports are not exposed

      Solution

      1. Step 1: Understand depends_on behavior

        The api service depends on db, so Docker Compose starts db first.
      2. Step 2: Check port mappings

        Ports are correctly mapped for both services, so they are exposed on the host machine.
      3. Final Answer:

        Both db and api services start, with api waiting for db to be ready -> Option A
      4. Quick Check:

        depends_on controls start order [OK]
      Hint: depends_on means start order matters [OK]
      Common Mistakes:
      • Assuming api starts before db
      • Thinking ports are not exposed without extra config
      • Believing depends_on waits for full readiness (it waits only for start)
      4. You wrote this docker-compose.yml but docker-compose up fails:
      services:
        app:
          image: myapp
          ports:
            - "8080:80"
          volumes:
            - ./app:/app
          environment:
            - DEBUG=true
        db:
          image: postgres
          ports:
            - "5432:5432"
          environment:
            POSTGRES_PASSWORD: example

      What is the error causing the failure?
      medium
      A. Port mapping for app is reversed; host port must be higher
      B. Volume mapping for app is invalid; local path must be absolute
      C. The environment variable for db uses wrong syntax; should be a list or key-value pairs
      D. Missing depends_on between app and db

      Solution

      1. Step 1: Check environment variable syntax

        For db, environment variables must be either a list of strings or a map with key-value pairs. Mixing styles causes errors.
      2. Step 2: Validate other configurations

        Volume and port mappings are valid; depends_on is optional and won't cause startup failure.
      3. Final Answer:

        The environment variable for db uses wrong syntax; should be a list or key-value pairs -> Option C
      4. Quick Check:

        Environment vars syntax must be consistent [OK]
      Hint: Use consistent environment variable syntax [OK]
      Common Mistakes:
      • Mixing list and map styles for environment variables
      • Assuming volume paths must be absolute
      • Thinking depends_on is mandatory
      5. You want to develop three microservices locally: frontend, backend, and database. The backend depends on database, and frontend depends on backend. You also want to share code changes live between your host and containers. Which docker-compose.yml setup best fits these requirements?
      hard
      A. Define all three services with depends_on chaining, map ports, and use volumes to mount source code directories
      B. Define only frontend and backend services, omit database, and build images without volumes
      C. Run each service in separate Docker Compose files without depends_on, and no volume mounts
      D. Use a single service combining all three microservices in one container with no volumes

      Solution

      1. Step 1: Setup service dependencies

        Use depends_on to ensure backend starts after database, and frontend after backend.
      2. Step 2: Enable live code sharing

        Use volumes to mount local source code directories into containers for live updates during development.
      3. Step 3: Expose necessary ports

        Map ports for each service to access them from the host machine.
      4. Final Answer:

        Define all three services with depends_on chaining, map ports, and use volumes to mount source code directories -> Option A
      5. Quick Check:

        Dependencies + volumes + ports = correct setup [OK]
      Hint: Use depends_on and volumes for live dev setup [OK]
      Common Mistakes:
      • Omitting the database service
      • Not using volumes for live code updates
      • Combining all services into one container