Bird
Raised Fist0
Dockerdevops~30 mins

Environment variables in Compose in Docker - Mini Project: Build & Apply

Choose your learning style10 modes available
Environment variables in Compose
📖 Scenario: You are setting up a simple web application using Docker Compose. You want to use environment variables to configure the application port and a greeting message.
🎯 Goal: Build a Docker Compose file that uses environment variables to set the port and greeting message for a web service.
📋 What You'll Learn
Create a Docker Compose file with a service named webapp
Use environment variables APP_PORT and GREETING in the Compose file
Set default values for these environment variables in the Compose file
Print the environment variables inside the container using a simple command
💡 Why This Matters
🌍 Real World
Environment variables in Docker Compose help configure containers without changing code or images. This is common in real projects to manage settings like ports, credentials, or messages.
💼 Career
Understanding environment variables in Compose is essential for DevOps roles to build flexible, configurable containerized applications.
Progress0 / 4 steps
1
Create the basic Docker Compose file
Create a file named docker-compose.yml with a service called webapp that uses the image alpine and runs the command sh -c "echo Hello".
Docker
Hint

Use the services key, then define webapp with image and command.

2
Add environment variables with default values
Add environment variables APP_PORT with default 8080 and GREETING with default Hello, World! under the webapp service using the environment key.
Docker
Hint

Use the environment key as a map with keys APP_PORT and GREETING.

3
Modify the command to print environment variables
Change the command of the webapp service to print both environment variables APP_PORT and GREETING using sh -c and echo. The command should print: Port: $APP_PORT, Message: $GREETING.
Docker
Hint

Use sh -c "echo Port: $APP_PORT, Message: $GREETING" as the command.

4
Run the Compose service and show output
Run docker-compose run webapp and print the output that shows the port and greeting message from the environment variables.
Docker
Hint

Use the terminal command docker-compose run webapp to see the output.

Practice

(1/5)
1. What is the main purpose of using environment in a Docker Compose file?
easy
A. To set environment variables inside containers
B. To define network settings for containers
C. To specify the container image version
D. To mount volumes from the host

Solution

  1. Step 1: Understand the role of environment variables

    Environment variables allow customization of container behavior without changing the container image or code.
  2. Step 2: Identify what environment does in Compose

    The environment key in Docker Compose sets these variables inside the container at runtime.
  3. Final Answer:

    To set environment variables inside containers -> Option A
  4. Quick Check:

    environment sets variables = C [OK]
Hint: Remember: environment = variables inside container [OK]
Common Mistakes:
  • Confusing environment with network or volume settings
  • Thinking environment sets image versions
  • Mixing environment with Dockerfile commands
2. Which of the following is the correct syntax to pass an environment variable named API_KEY with value 12345 in a Docker Compose service?
easy
A. set_env: - API_KEY: 12345
B. environment: - API_KEY=12345
C. variables: API_KEY=12345
D. env: API_KEY: 12345

Solution

  1. Step 1: Recall Docker Compose environment syntax

    Docker Compose uses the environment key with a list or dictionary to set variables.
  2. Step 2: Match correct syntax for list format

    The correct list format is environment:\n - API_KEY=12345. Other keys like env, variables, or set_env are invalid.
  3. Final Answer:

    environment: - API_KEY=12345 -> Option B
  4. Quick Check:

    Correct key and list syntax = D [OK]
Hint: Use 'environment:' with dash and equals for variables [OK]
Common Mistakes:
  • Using wrong keys like env or variables
  • Mixing colon and equals signs incorrectly
  • Indentation errors in YAML
3. Given this Compose snippet:
version: '3'
services:
  app:
    image: myapp
    environment:
      - MODE=${APP_MODE}
If the host environment variable APP_MODE is set to production, what will be the value of MODE inside the container?
medium
A. MODE
B. ${APP_MODE}
C. production
D. undefined

Solution

  1. Step 1: Understand variable substitution in Compose

    Compose replaces ${APP_MODE} with the value of the host environment variable APP_MODE when starting containers.
  2. Step 2: Apply substitution with given host variable

    Since APP_MODE is set to production on the host, MODE inside the container will be production.
  3. Final Answer:

    production -> Option C
  4. Quick Check:

    Host var substitution = production [OK]
Hint: Host vars replace ${VAR} in Compose environment [OK]
Common Mistakes:
  • Thinking ${APP_MODE} stays as literal string
  • Assuming variable is undefined inside container
  • Confusing container env with host env
4. You wrote this Compose snippet:
services:
  web:
    image: nginx
    environment:
      - PORT: 80
But the container does not get the PORT variable set. What is the error?
medium
A. Missing quotes around 80
B. environment key should be under volumes
C. Image name is incorrect
D. Using colon instead of equals sign in environment list

Solution

  1. Step 1: Check environment variable syntax in list form

    When using a list under environment, variables must be in KEY=VALUE format, not KEY: VALUE.
  2. Step 2: Identify the error in the snippet

    The snippet uses - PORT: 80 which is invalid YAML for a list item; it should be - PORT=80.
  3. Final Answer:

    Using colon instead of equals sign in environment list -> Option D
  4. Quick Check:

    List env vars use = not : [OK]
Hint: Use '=' for list env vars, ':' only in dict format [OK]
Common Mistakes:
  • Mixing list and dictionary syntax for environment
  • Thinking quotes are mandatory for numbers
  • Placing environment under wrong keys
5. You want to pass a default value for an environment variable LOG_LEVEL in Compose if the host variable is unset or empty. Which syntax correctly sets LOG_LEVEL to info by default?
hard
A. environment: - LOG_LEVEL=${LOG_LEVEL:-info}
B. environment: LOG_LEVEL: info
C. environment: - LOG_LEVEL=info
D. environment: - LOG_LEVEL=${LOG_LEVEL-info}

Solution

  1. Step 1: Understand Compose variable default syntax

    Compose supports shell-style default values using ${VAR:-default} to use default if VAR is unset or empty.
  2. Step 2: Identify correct syntax for default

    ${LOG_LEVEL:-info} sets LOG_LEVEL to host value if set, else info. Other options either ignore host variable or use incorrect syntax.
  3. Final Answer:

    environment: - LOG_LEVEL=${LOG_LEVEL:-info} -> Option A
  4. Quick Check:

    Use ${VAR:-default} for defaults [OK]
Hint: Use ${VAR:-default} to set default env var in Compose [OK]
Common Mistakes:
  • Using ${VAR-default} which does not handle empty values
  • Setting static value ignoring host variable
  • Wrong YAML indentation or syntax
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