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
- Використання
latest‑тегу – у продакшн‑середовищі це непередбачувано. - Hard‑coded паролі у
docker‑compose.yml– зберігайте їх у.envабо Vault. - Відсутність
depends_on– сервіси можуть стартувати в неправильному порядку. - Незакриті volume‑и – залишають дані між запуском, що у тестах часто плутає результати.
Conclusion / Action plan
- Створіть
docker-compose.ymlі.envзгідно прикладу. - Запустіть
docker compose up -dі переконайтесь, що веб‑сервер відповідає. - Додайте моніторинг контейнерів (Grafana + Prometheus) для продакшн‑версії.
- Перевірте, що усі секрети знаходяться в безпечному сховищі.
- Очищайте середовище після тестів, щоб уникнути «запилення» volume‑ів.