🧠 Docker Compose — Вики для души
Документация по полям docker-compose.yml
, которая отвечает не только на «что это?», но и «а влияет ли порядок?», «а нужно ли это вообще?». Всё по-человечески.
💼 services
Главный раздел — тут описываются все контейнеры твоего приложения.
services:
app:
image: myapp:latest
ports:
- "5000:5000"
Каждый ключ (app
, db
, web
и т.д.) — это отдельный контейнер.
🔄 build
build:
context: ./папка
dockerfile: Dockerfile.custom # необязательно
args:
BUILD_ENV: production
Что делает? |
Собирает образ из Dockerfile в context |
Переопределяет image: ? |
✅ Да |
Зависит от порядка? |
❌ Нет |
Когда нужен? |
Когда у тебя кастомный код / билд |
Если есть и build:
, и image:
, то образ будет собран и назван как указано в image:
.
📦 image
Что делает? |
Указывает имя образа (использует, или сохранит под этим именем, если есть build: ) |
Порядок важен? |
❌ Нет |
Работает с build: ? |
✅ Да, если есть — будет билд с этим тегом |
🚪 ports
Что делает? |
Пробрасывает порт хост:контейнер |
Порядок важен? |
❌ Нет |
Множественные порты? |
✅ Да |
🗂 volumes
volumes:
- ./data:/app/data
- db-data:/var/lib/postgresql/data
Что делает? |
Примонтирует директорию/том внутрь контейнера |
Порядок важен? |
❌ Нет |
Поддерживает и именованные, и bind-монты? |
✅ Да |
🌍 environment
environment:
ENV: production
DEBUG: true
Что делает? |
Передаёт переменные окружения в контейнер |
Формат? |
ключ: значение или - КЛЮЧ=ЗНАЧЕНИЕ |
Порядок важен? |
❌ Нет |
🤝 depends_on
Что делает? |
Запускает контейнер только после зависимых |
Гарантирует, что сервис будет готов? |
❌ Нет, только запущен |
Порядок важен? |
✅ Да (по очереди) |
⚠️ Используй healthcheck
, если хочешь быть уверен, что сервис готов к работе
🔗 networks
Что делает? |
Подключает контейнер к указанной сети |
Порядок важен? |
❌ Нет |
Если не указано? |
Docker создаст projectname_default сеть |
📦 volumes (вне services)
volumes:
db-data:
external: true
Что делает? |
Объявляет том — или создаёт, или использует внешний |
Нужно ли указывать здесь, если используешь в service? |
✅ Да |
🌐 networks (вне services)
networks:
frontend:
external: true
Что делает? |
Объявляет пользовательскую сеть |
Если не указана? |
Создаётся default сеть автоматически |
🔁 restart
Что делает? |
Задаёт политику автозапуска контейнера |
Порядок важен? |
❌ Нет |
Опции:
no
(по умолчанию)
always
on-failure
unless-stopped
📋 Итого: что важно, а что — пофигу
Поле |
Важно ли оно? |
Влияет ли порядок? |
build |
✅ Да |
❌ Нет |
image |
✅ Да |
❌ Нет |
ports |
✅ Да |
❌ Нет |
volumes |
✅ Да |
❌ Нет |
depends_on |
✅ Да |
✅ Да (очередность) |
networks |
✅ Да |
❌ Нет |
restart |
✅ Иногда |
❌ Нет |