Структура файла 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.
Проверьте себя
1. В каком разделе compose.yaml описывают контейнеры приложения?
Acontainers
Bservices
Cimages
Dapps
2. Какому флагу docker run соответствует ключ environment?
A-p
B-e
C-v
D--name
3. Что на самом деле гарантирует depends_on?
AЧто зависимый сервис полностью готов принимать запросы
BТолько порядок старта: сервис запустится после указанного, но без ожидания его готовности
CЧто сервисы запустятся одновременно
DЧто сервис перезапустится при сбое
Поддержать проект