Gymterview
middle

Какие основные директивы используются в docker-compose.yml?

Директивы docker-compose.yml — это ключевые слова YAML-конфигурации, определяющие сервисы, их образы, сети, тома и поведение при запуске.

services

Определяет контейнеры (сервисы), которые будут запущены:

Пример
services:
  app:
    image: my-spring-app:1.0
  db:
    image: postgres:16-alpine

image / build

Указывает, какой образ использовать или как его собрать:

Пример
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    # или
    image: my-spring-app:1.0

ports

Маппинг портов хост:контейнер:

Пример
ports:
  - "8080:8080"
  - "5005:5005"  # debug порт

environment / env_file

Переменные окружения:

Пример
environment:
  SPRING_PROFILES_ACTIVE: prod
  JAVA_OPTS: "-Xmx512m -Xms256m"
# или
environment:
  - SPRING_PROFILES_ACTIVE=prod

# загрузка из файла
env_file:
  - .env

volumes

Монтирование томов:

Пример
volumes:
  - postgres-data:/var/lib/postgresql/data   # именованный том
  - ./config:/app/config                      # bind mount

networks

Определение сетей:

Пример
services:
  app:
    networks:
      - backend
  db:
    networks:
      - backend
networks:
  backend:
    driver: bridge

depends_on

Порядок запуска сервисов:

Пример
depends_on:
  - db
  - redis
# С проверкой условия (Compose V2):
depends_on:
  db:
    condition: service_healthy

depends_on гарантирует только порядок запуска контейнеров, но не то, что сервис внутри контейнера готов принимать соединения. Для этого нужно использовать condition: service_healthy с health check или механизм retry на уровне приложения.

restart

Политика перезапуска:

Пример
restart: unless-stopped
# Другие варианты: no, always, on-failure

healthcheck

Проверка состояния сервиса:

Пример
healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]
  interval: 30s
  timeout: 10s
  retries: 3
  start_period: 40s

На собеседовании: назовите ключевые директивы: services, image/build, ports, environment, volumes, depends_on, healthcheck. Частая ловушка — вопрос про depends_on: он не ждёт готовности сервиса, а только запускает контейнеры в нужном порядке. Для ожидания готовности нужен condition: service_healthy.