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