Структура файла compose.yaml
Разбираем по ключам структуру файла compose.yaml на примере приложения с базой данных.
Сервис (service) в Compose — описание одного контейнера: какой образ, какие порты, тома и переменные.
Каркас файла
Главный раздел — services. Внутри — именованные сервисы, каждый станет контейнером. Имя сервиса служит и сетевым именем для связи.
services:
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
api:
image: my-app:1.0
ports:
- "8000:8000"
environment:
DATABASE_URL: postgresql://postgres:secret@db:5432/postgres
depends_on:
- db
volumes:
pgdata:
Ключи сервиса
| Ключ | Аналог в docker run | Назначение |
image | имя образа | какой образ использовать |
ports | -p | проброс портов host:container |
volumes | -v | тома и монтирования |
environment | -e | переменные окружения |
depends_on | — | порядок запуска сервисов |
ports и environment
ports повторяет логику -p: слева порт хоста, справа контейнера, в кавычках. environment задаёт переменные окружения — здесь мы передаём базе пароль, а приложению строку подключения, где хост — это имя сервиса db.
volumes
Внутри сервиса volumes перечисляет монтирования. Именованные тома, кроме того, объявляют в отдельном верхнеуровневом разделе volumes в конце файла — иначе Compose их не создаст.
depends_on и сеть
depends_on задаёт порядок: api стартует после db. Важно понимать: это влияет только на порядок старта, но не ждёт готовности базы принимать соединения — для этого нужны health-проверки. Отдельную сеть прописывать не нужно: Compose автоматически создаёт общую сеть для всех сервисов проекта, и они видят друг друга по имени.
Итог
- Сервисы описывают в разделе
services; имя сервиса — это и сетевое имя. - Ключи
image,ports,volumes,environmentповторяют флагиdocker run. depends_onзадаёт порядок старта; именованные тома объявляют в верхнем разделеvolumes.