Логотип Workflow

Article

Updated at:

Docker Compose

Этап 7 - Docker Compose

Docker Compose существует потому, что реальные приложения — это не один container. Backend может требовать PostgreSQL, Redis, migrations, worker и local mail service. Compose описывает эту маленькую систему в одном file.

Docker Docker Compose

Compose описывает маленькую систему

Compose file — это topology проекта. services описывают containers. volumes описывают persistent storage. networks описывают communication. Environment variables передают configuration в services без изменения image.

services: api, db
api depends on db
db uses volume
both share network
.env supplies values

Spring Boot плюс PostgreSQL

Для Spring Boot плюс PostgreSQL Compose убирает угадывание. API service может подключаться к db:5432, потому что оба service находятся в одной network. PostgreSQL хранит files в named volume, поэтому data переживает пересоздание service.

Где Compose заканчивается

Compose scaling полезен для stateless replicas, но имеет limits. Local Compose не заменяет Kubernetes или другой orchestrator. Port conflicts, rolling updates, cross-host scheduling и secret management остаются ограниченными.

Compose как documentation, не только automation

Хороший Compose file — executable documentation. Он должен показывать, какие services существуют, какие ports публичные, какие data persistent и какие configuration values нужны. Если teammate может прочитать file и нарисовать local system, file выполняет свою работу.

Поэтому service names важны. Service с именем db или postgres объясняет больше, чем случайное имя. Volume с именем postgres-data объясняет больше, чем anonymous generated volume. Хорошие names уменьшают количество дополнительных объяснений.

Compose также помогает избежать длинных docker run commands. Длинные commands трудно review и легко потерять. YAML не идеален, но дает команде стабильный file, который можно версионировать.

Environment variables и secrets

.env file полезен для local defaults: ports, usernames и feature flags. Он не должен превращаться в место для production secrets. Local convenience и production security — разные задачи.

Compose поддерживает несколько способов передавать values. Путь для новичка — environment variables для non-sensitive local settings. Для sensitive values целевая platform должна давать настоящий secret mechanism. Даже в local projects не стоит commit реальные passwords и tokens.

Где выполняется Compose

docker compose up выполняется из terminal в директории с Compose file или из директории, где вы явно указали этот file. Compose читает YAML, затем просит локальный Docker daemon создать containers, networks и volumes.

Compose сам по себе не является remote deployment system. Если вы запускаете его на ноутбуке, containers стартуют на ноутбуке. Если вы подключились по SSH на VPS и запускаете его там, containers стартуют на VPS. File может быть тем же, но Docker host другой.

Поэтому environment files и volume paths нужно использовать аккуратно. Bind mount path, существующий на ноутбуке, может не существовать на server. .env file для local setup может быть неподходящим для production secrets.

Команды: запустить и проверить

Выполняйте эти commands в terminal той машины, где установлен Docker. Для локального обучения это terminal на вашем ноутбуке. Для VPS сначала подключитесь к server по SSH, затем запускайте commands там. Не вставляйте commands вслепую: запустите одну command, посмотрите, что изменилось, затем переходите к следующей.

docker compose config
docker compose up -d
docker compose logs -f api
docker compose exec db psql -U postgres
docker compose down

Таблица для ориентира

ТемаЧто означаетПрактический вывод
servicesКомпоненты приложенияAPI, database, cache, worker
volumesPersistent storageDatabase files и durable local state
networksService communicationService names становятся DNS records

Review Compose

Проверяйте Compose file через вопрос: чем владеет каждый service. API владеет application runtime. Database владеет persistent files через volume. Network владеет service discovery. .env file владеет local configuration defaults.

Если строка в Compose не имеет понятного owner или purpose, позже ее будет трудно debug. Compose должен делать system понятнее, а не только короче для запуска.

Контрольная точка

Продолжайте, когда можете объяснить Compose file не построчно, а по объектам: services, затем volumes, networks, environment и startup commands.

Практика: чтение Compose file

Откройте Compose file и выделите разными цветами objects: services, volumes, networks, environment variables и ports. Затем объясните приложение без упоминания YAML syntax. Если вы не можете объяснить, зачем существует volume или network, Compose file недостаточно ясно показывает system.

Короткий вывод

Главный ориентир: Compose должен читаться как описание системы. Если файл нельзя пересказать словами «api зависит от db, db хранит data в volume, оба service общаются через network», значит структуру стоит упростить или лучше задокументировать.