← Docker

Docker Compose

Что такое Docker Compose

Docker Compose позволяет описать сразу несколько контейнеров в одном файле docker-compose.yml и управлять ими как единым приложением. Это удобно, когда сервисов больше одного: например, веб-приложение и база данных.

Структура файла

Основные директивы docker-compose.yml:

Ключ Назначение
servicesСписок сервисов (контейнеров)
imageГотовый образ из реестра
buildСборка образа из Dockerfile
portsПроброс портов «хост:контейнер»
volumesПостоянное хранилище данных
environmentПеременные окружения
depends_onПорядок запуска сервисов
restartПолитика перезапуска

Пример

Приложение на Node.js с базой данных PostgreSQL:

services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgres://user:pass@db:5432/app
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: app
    volumes:
      - db-data:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  db-data:

Основные команды

Запустить все сервисы в фоне:

docker compose up -d

Собрать образы перед запуском:

docker compose up -d --build

Посмотреть статус сервисов:

docker compose ps

Логи всех сервисов или одного конкретного:

docker compose logs -f
docker compose logs -f app

Остановить и удалить сервисы. Флаг -v удалит и тома:

docker compose down
docker compose down -v

Перезапустить отдельный сервис:

docker compose restart app

Выполнить команду внутри запущенного сервиса:

docker compose exec app sh

Полезные мелочи

  • docker compose pull — обновить образы до свежих версий.
  • docker compose config — проверить корректность файла.
  • Имя сервиса в compose — это сразу и hostname внутри сети.