Реальное приложение — это не один контейнер, а несколько: само приложение, база данных, кэш, очередь. Запускать каждый вручную с длинными командами run, томами и сетями утомительно и легко ошибиться.
Docker Compose решает это: вы описываете все сервисы в одном файле docker-compose.yml, а поднимаете их одной командой.
services: app: build: . ports: - "3000:3000" depends_on: - db db: image: postgres environment: POSTGRES_PASSWORD: secret volumes: - pgdata:/var/lib/postgresql/data
volumes: pgdata:
Здесь описаны два сервиса: app (собирается из Dockerfile) и db (готовый образ postgres). Compose автоматически создаёт общую сеть, поэтому app обращается к базе по имени db. depends_on задаёт порядок запуска, volumes сохраняют данные. Весь стек приложения — в одном читаемом файле.