Hook

Потрібно запустити кілька контейнерів (наприклад, веб‑сервер + база даних) і не писати безліч docker run‑команд? Docker Compose робить це за вас.

Problem / Context

Коли проєкт розростається, окремі docker run‑команди стають важкими для підтримки: потрібно памʼятати порти, volume‑и, змінні середовища. Без централізованого файлу важко відтворити середовище на новій машині.

Why it matters

Compose забезпечує детерміноване та повторюване локальне середовище, дозволяє швидко підняти стека для розробки, тестування та навіть в продакшн‑міні‑кластерах.

How to do it

1. Файл docker-compose.yml

version: "3.9"
services:
  web:
    image: nginx:stable-alpine
    ports:
      - "8080:80"
    depends_on:
      - db
    environment:
      - DB_HOST=db
  db:
    image: postgres:15-alpine
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_DB: ${POSTGRES_DB}
volumes:
  db-data:

2. Файл .env

POSTGRES_USER=app
POSTGRES_PASSWORD=secret
POSTGRES_DB=appdb

3. Запуск

docker compose up -d   # підняти всі сервіси у фон
docker compose ps       # статус

4. Логи та відладка

docker compose logs -f web   # слідкуємо за виводом Nginx

5. Очищення

docker compose down --volumes   # зупинити та видалити volume‑и

Anti‑patterns

Conclusion / Action plan

  1. Створіть docker-compose.yml і .env згідно прикладу.
  2. Запустіть docker compose up -d і переконайтесь, що веб‑сервер відповідає.
  3. Додайте моніторинг контейнерів (Grafana + Prometheus) для продакшн‑версії.
  4. Перевірте, що усі секрети знаходяться в безпечному сховищі.
  5. Очищайте середовище після тестів, щоб уникнути «запилення» volume‑ів.