Bird
Raised Fist0
Spring Bootframework~5 mins

docker-compose for services in Spring Boot - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is docker-compose used for in a Spring Boot project?
Docker-compose helps you run multiple containers together easily. For example, you can start your Spring Boot app and a database with one command.
Click to reveal answer
beginner
In a docker-compose.yml file, what does the services section define?
The services section lists all the containers you want to run. Each service is like a mini-app or tool, such as your Spring Boot app or a database.
Click to reveal answer
intermediate
How do you link a Spring Boot service to a database service in docker-compose?
You define both services under services. Then, in the Spring Boot service, you set environment variables or network settings to connect to the database service by its name.
Click to reveal answer
intermediate
What is the purpose of the depends_on key in docker-compose?
It tells Docker to start one service only after another service is started. For example, start the database before the Spring Boot app so it can connect properly.
Click to reveal answer
beginner
How can you expose your Spring Boot app's port to your local machine using docker-compose?
Use the ports key in the Spring Boot service to map container ports to your computer's ports, like 8080:8080. This lets you access the app in a browser.
Click to reveal answer
What does the services section in docker-compose.yml do?
ASpecifies network rules only
BLists files to copy into containers
CDefines containers to run together
DSets environment variables globally
Which key ensures one service starts after another in docker-compose?
Adepends_on
Blinks
Cvolumes
Dnetworks
How do you make your Spring Boot app accessible on your local machine using docker-compose?
AMap ports with <code>ports</code> key
BSet <code>environment</code> variables
CUse <code>volumes</code> to share code
DAdd <code>depends_on</code> for the app
In docker-compose, how do you connect your Spring Boot app to a database service?
ABy sharing volumes
BBy exposing ports only
CBy using <code>depends_on</code> only
DBy setting the database service name as host
What file do you write to define multiple services for Docker Compose?
ADockerfile
Bdocker-compose.yml
Capplication.properties
Dpom.xml
Explain how you would set up a Spring Boot app and a database using docker-compose.
Think about service definitions, start order, ports, and connection settings.
You got /4 concepts.
    Describe the role of the ports and depends_on keys in a docker-compose.yml file.
    One is about access, the other about timing.
    You got /2 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using docker-compose with Spring Boot services?
      easy
      A. To run multiple related services together with one configuration file
      B. To compile Java code faster
      C. To replace the Spring Boot framework
      D. To write unit tests automatically

      Solution

      1. Step 1: Understand what docker-compose does

        Docker Compose is a tool to run multiple containers (services) together using one YAML file.
      2. Step 2: Relate to Spring Boot services

        It helps run your Spring Boot app alongside databases or other services easily.
      3. Final Answer:

        To run multiple related services together with one configuration file -> Option A
      4. Quick Check:

        docker-compose = run multiple services [OK]
      Hint: Remember: docker-compose manages multiple containers easily [OK]
      Common Mistakes:
      • Thinking docker-compose compiles code
      • Confusing docker-compose with testing tools
      • Believing it replaces Spring Boot
      2. Which of the following is the correct way to specify a service's port mapping in a docker-compose.yml file?
      easy
      A. ports: - "8080:8080"
      B. ports: 8080:8080
      C. port: 8080->8080
      D. expose: 8080:8080

      Solution

      1. Step 1: Recall docker-compose port syntax

        Ports are listed as a YAML array with dash and quotes, like ports: - "hostPort:containerPort".
      2. Step 2: Check options

        ports: - "8080:8080" matches the correct YAML syntax for port mapping.
      3. Final Answer:

        ports: - "8080:8080" -> Option A
      4. Quick Check:

        Port mapping uses dash and quotes in YAML [OK]
      Hint: Use dash and quotes for ports in docker-compose YAML [OK]
      Common Mistakes:
      • Omitting dash for list items
      • Using wrong key 'port' instead of 'ports'
      • Confusing 'expose' with 'ports'
      3. Given this docker-compose.yml snippet:
      services:
        app:
          image: springboot-app
          ports:
            - "8080:8080"
          depends_on:
            - db
        db:
          image: postgres
          environment:
            POSTGRES_PASSWORD: example

      What happens when you run docker-compose up?
      medium
      A. docker-compose throws a syntax error
      B. Only app service starts, db is ignored
      C. db starts but app fails due to missing environment
      D. Both app and db services start, app waits for db to start

      Solution

      1. Step 1: Understand depends_on behavior

        The app service depends on db, so docker-compose starts db first, then app.
      2. Step 2: Check environment and ports

        db has required environment variable, app exposes port 8080 correctly.
      3. Final Answer:

        Both app and db services start, app waits for db to start -> Option D
      4. Quick Check:

        depends_on starts dependencies first [OK]
      Hint: depends_on starts services in order, no syntax errors here [OK]
      Common Mistakes:
      • Assuming depends_on waits for full readiness
      • Thinking db is ignored without explicit start
      • Confusing environment variables with ports
      4. You wrote this docker-compose.yml but your Spring Boot app fails to connect to the database:
      services:
        app:
          image: springboot-app
          ports:
            - "8080:8080"
          environment:
            SPRING_DATASOURCE_URL: jdbc:postgresql://localhost:5432/mydb
        db:
          image: postgres
          environment:
            POSTGRES_PASSWORD: example

      What is the likely problem?
      medium
      A. POSTGRES_PASSWORD is incorrect environment variable
      B. Missing port mapping for db service
      C. The app tries to connect to localhost instead of the db service hostname
      D. The app image name is wrong

      Solution

      1. Step 1: Check datasource URL in app environment

        The app uses jdbc URL with 'localhost', which inside container means itself, not db service.
      2. Step 2: Understand docker-compose networking

        Services communicate by service name, so URL should use 'db' hostname, not 'localhost'.
      3. Final Answer:

        The app tries to connect to localhost instead of the db service hostname -> Option C
      4. Quick Check:

        Use service name, not localhost, for inter-service DB URL [OK]
      Hint: Use service names, not localhost, inside docker-compose networks [OK]
      Common Mistakes:
      • Assuming localhost works inside containers
      • Forgetting to map ports for external access
      • Misnaming environment variables
      5. You want to run a Spring Boot app with a MySQL database using docker-compose. You want the database to keep data even if the container stops. Which snippet correctly adds persistent storage for the database?
      hard
      A. volumes: - /var/lib/mysql:/db-data volumes: db-data:
      B. volumes: - db-data:/var/lib/mysql volumes: db-data:
      C. volumes: - db-data:/mysql/data volumes: mysql-data:
      D. volumes: - /mysql/data:/db-data volumes: db-data:

      Solution

      1. Step 1: Understand volume syntax for persistence

        Docker volumes map a named volume to the container path where data is stored, e.g., db-data:/var/lib/mysql.
      2. Step 2: Check volume declaration

        The named volume must be declared under top-level volumes: with the same name.
      3. Final Answer:

        volumes: - db-data:/var/lib/mysql volumes: db-data: -> Option B
      4. Quick Check:

        Named volume mapped to container path with declaration [OK]
      Hint: Map named volume to container data path and declare it below [OK]
      Common Mistakes:
      • Reversing host and container paths
      • Not declaring the named volume
      • Using wrong container data directory
      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