Docker Foundations·Ship the environment with the app

Compose a real stack

Compose describes services, networks and volumes in one reproducible file.

Beginner 14 min read Lesson 9 of 300 Challenge included
What you will be able to do
  • Keep secrets out of compose.yaml; use environment files or a secret manager.
  • Add healthchecks and depend_on with condition: service_healthy.
  • Use a distinct override file for local-only development settings.

In plain English

A Compose file is a local development contract. Service names become DNS names; depends_on controls start order but not readiness. Use healthchecks and wait for dependencies instead of sleeping.

compose.yamlYAML
services:
  app:
    build: .
    ports: ["3000:3000"]
    environment:
      DATABASE_URL: postgres://app:secret@db:5432/app
    depends_on:
      db:
        condition: service_healthy
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: app
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app"]
      interval: 5s
      retries: 10
volumes:
  pgdata:
Your turn

Add a healthcheck

Medium

Add a pg_isready healthcheck to a Postgres service and make the app depend on it being healthy.

YAML · starter
services:
  app:
    image: my-app
Check your understanding before moving on.
Knowledge checkQuestion 1

What does depends_on with service_healthy wait for?

Select an answer to continue
Study tools

Make it yours.

Keep a private note for this lesson, then turn the key ideas into flashcards you can revisit.

Sign in to save notes and flashcards.Both are private to your account and stay with your progress.
Sign in
Finished reading?

Lock in what you just learned.

Mark this lesson complete to save your place and move one step closer to the certificate.

Next: Production containers
Lesson 9 of 300 · 0% of course