Спецификация Compose v2 (Справочник)

Справочник: Полная спецификация compose.yaml — services, networks, volumes, configs, secrets, deploy.

Compose Specification (ранее docker-compose.yml версии 3) — это стандарт описания многоконтейнерных приложений.

Структура файла compose.yaml

Файл состоит из трех верхнеуровневых секций: services, networks и volumes.

services:
  # Определение контейнеров
  webapp:
    image: nginx
    ...
 
networks:
  # Определение сетей
  app-net:
    driver: bridge
 
volumes:
  # Определение томов
  db-data:

1. Services (Сервисы)

Ключевые параметры конфигурации сервиса.

ПолеОписаниеПример
imageОбраз для запуска.postgres:15-alpine
buildСборка из Dockerfile.context: ., dockerfile: Dockerfile.prod
container_nameФиксированное имя контейнера (не рекомендуется для масштабирования).my-db
portsПубликация портов (Host:Container).["8080:80"]
exposeОткрыть порт только для других сервисов (не на хост).["5432"]
volumesМонтирование томов или путей.["./data:/var/lib/mysql"]
environmentПеременные окружения (список или словарь).DB_HOST: postgres
env_fileФайл с переменными (.env).["./.env"]
depends_onЗависимости запуска.db: { condition: service_healthy }
restartПолитика перезапуска.unless-stopped
commandПереопределение CMD образа.["npm", "run", "dev"]
entrypointПереопределение ENTRYPOINT образа.["/app/init.sh"]
userUID:GID запуска.1000:1000
profilesГруппировка сервисов для выборочного запуска.["debug", "tools"]

Healthcheck (Проверка здоровья)

Критически важно для depends_on.

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 30s
  timeout: 10s
  retries: 3
  start_period: 40s # Время на "разогрев"

Logging (Логирование)

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "3"

2. Networks (Сети)

По умолчанию Compose создает одну сеть default.

networks:
  backend:
    driver: bridge
  frontend:
    driver: bridge

Подключение сервиса к сети:

services:
  app:
    networks:
      - backend
      - frontend

Статические IP (редко нужно)

networks:
  my-net:
    ipam:
      config:
        - subnet: 172.20.0.0/16
 
services:
  app:
    networks:
      my-net:
        ipv4_address: 172.20.0.5

3. Volumes (Тома)

volumes:
  # Создать новый пустой том
  db-data:
  
  # Использовать уже созданный внешний том
  external-data:
    external: true

4. Различия v2 и v3 (Legacy)

В современной спецификации (Compose Spec):

  • Поле version: "3.8" больше не нужно.
  • Команда docker-compose (Python, v1) заменена на docker compose (Go, v2).
  • Параметры ресурсов (cpus, memory) переехали из deploy (Swarm) напрямую в сервис (для локального Docker).

Лимиты ресурсов (Deploy)

Работает и в Swarm, и в Docker Compose v2.

deploy:
  resources:
    limits:
      cpus: '0.50'
      memory: 512M
    reservations:
      cpus: '0.25'
      memory: 128M