EMZETT.
Войти

Docker Compose: запуск нескольких контейнеров вместе

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

Подробнее: Приложение часто состоит из нескольких частей: веб-приложение, база данных, кэш, обратный прокси. С отдельными командами docker run это становится запутанным. Docker Compose объединяет всё в одном compose.yaml.

Подробности

Пример

services:
  web:
    build: .
    ports:
      - "127.0.0.1:3000:3000"
    environment:
      DATABASE_URL: postgres://app:secret@db:5432/app
    depends_on:
      db:
        condition: service_healthy
  db:
    image: postgres:16
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: app
    volumes:
      - dbdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app"]
      interval: 5s
volumes:
  dbdata:

Сервисы обращаются друг к другу по имени (db). Compose создаёт общую сеть.

Важные команды

docker compose up -d          # запустить (в фоне)
docker compose logs -f web    # следить за журналами
docker compose ps             # состояние
docker compose exec db psql -U app   # команда в контейнере
docker compose down           # остановить и удалить
docker compose down -v        # дополнительно удалить тома (данные пропадут!)
docker compose up --build     # пересобрать

Старый синтаксис: docker-compose (через дефис).

Конфигурация и безопасность

  • Секреты не записывайте в репозиторий: файл .env (в .gitignore), env_file: или Docker secrets.
  • Публикуйте порты только где необходимо; не открывайте внутренние сервисы (база данных) наружу (127.0.0.1: или вообще без порта).
  • Тома для постоянных данных; планируйте резервные копии.
  • Фиксируйте версии (postgres:16 вместо latest).
  • Проверки работоспособности и restart: unless-stopped для стабильности.
  • С помощью профилей и файлов переопределения (compose.override.yaml) разделяют разработку и production.

Ограничения

Compose работает на одной машине. Для многих серверов, автоматического масштабирования и отказоустойчивости используйте Kubernetes или Docker Swarm. Для домашних серверов и небольших проектов Compose обычно идеален. Сначала изучите основы Docker, затем Compose.

См. также: Docker, Тома и сети Docker, Основы Kubernetes, Docker: порт уже занят, Файлы env