Docker Compose

Compose — декларативное описание мульти-контейнерных приложений. Один docker-compose.yml вместо десятка docker run. Изначально Python-скрипт, теперь — Go-плагин (docker compose без дефиса).

Пример

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    depends_on:
      - api

  api:
    build: ./api
    environment:
      DB_HOST: db
    restart: unless-stopped

  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD_FILE: /run/secrets/db_pass
    volumes:
      - dbdata:/var/lib/postgresql/data
    secrets:
      - db_pass

volumes:
  dbdata:

secrets:
  db_pass:
    file: ./secrets/db_password.txt

Команды

docker compose up -d       # запустить в фоне
docker compose down        # остановить и удалить
docker compose ps          # статус
docker compose logs -f api # логи
docker compose exec api sh # шелл
docker compose build       # пересобрать
docker compose pull        # обновить

Сеть

Compose создаёт отдельную bridge-сеть для проекта. Сервисы обращаются по имени (db, api). DNS резолвится автоматически.

Профили

services:
  web: {...}
  db:  {...}
  dev-tools:
    image: adminer
    profiles: [dev]

docker compose up                    # без dev-tools
docker compose --profile dev up      # с dev-tools

Override files

docker-compose.override.yml автоматически мержится. Prod-config чистым, dev-настройки — в override (gitignored).

Compose Spec

С 2020 — открытая спецификация compose-spec.io. Podman, nerdctl, buildx-bake используют тот же YAML.

Compose vs Kubernetes

ComposeK8s
Дляdev, small prodкластеры, HA
Порог входанизкийвысокий
МультихостSwarm или ничегода
АвтоскейлингнетHPA/VPA

См. также

← на главную