Какие основные директивы используются в 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.