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