Docker Compose
  • is a container orchestration tool for defining and running multi-container Docker applications within a single server
  • with Compose, you use a YAML file (i.e. docker-compose.yml) to configure your application’s services
  • is a declarative approach that replaces individual docker commands

Declarative Approach vs Imperative Approach

Declarative

Imperative

services:
  api:
    build: ./api
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres:// ...@db:5432/mydb
    depends_on:
      - db
  db:
    image: postgres:16
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=pass
      - POSTGRES_USER=user
      - POSTGRES_DB=my_db

volumes:
  db-data:
$ docker network create my-network
$ docker volume create db-data
$ docker build -t my-api ./api
$ docker run -d --name db \
    --network my-network \
    -v db-data:/var/lib/... \
    -e POSTGRES_PASSWORD=pass \
    postgres:16
$ docker run -d --name api \
    --network my-network \
    -p 3000:3000 \
    -e DATABASE_URL=... \
    my-api

Versions

version

command

description

v1

docker-compose

deprecated

v2

docker compose

current

Other