MAATRIX / Блог / docker compose: поднимаем стек одной командой

docker compose: поднимаем стек одной командой

Блог MAATRIX · 2026-07-07

Когда сервисов больше одного — приложение, база, кэш, прокси — запускать их вручную через docker run мучительно. docker compose описывает весь стек в одном YAML-файле и поднимает его целиком. Разберём рабочий пример.

Идея compose

['Один файл compose.yaml описывает все сервисы, их образы, порты, тома и связи. Команда docker compose up поднимает всё сразу, down — гасит.', 'Плюс: конфигурация лежит в git, разворачивается идентично на любом сервере. Это инфраструктура как код в миниатюре.']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS под docker-стек

Рабочий compose.yaml

['Стек из веб-приложения, PostgreSQL и nginx. Создаём файл в папке проекта:', '
services:\n  db:\n    image: postgres:16\n    restart: always\n    environment:\n      POSTGRES_PASSWORD: secret\n      POSTGRES_DB: appdb\n    volumes:\n      - db_data:/var/lib/postgresql/data\n\n  app:\n    image: myapp:latest\n    restart: always\n    depends_on:\n      - db\n    environment:\n      DATABASE_URL: postgres://postgres:secret@db:5432/appdb\n\n  proxy:\n    image: nginx:latest\n    restart: always\n    ports:\n      - "80:80"\n    volumes:\n      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro\n    depends_on:\n      - app\n\nvolumes:\n  db_data:
', 'Обратите внимание: app обращается к базе по имени сервиса db, а не по IP — compose создаёт внутреннюю сеть с DNS.']

Запуск и управление

['
docker compose up -d\ndocker compose ps
', 'Флаг -d запускает в фоне. Логи всего стека или одного сервиса:', '
docker compose logs -f\ndocker compose logs -f app
', 'Обновить один сервис после нового образа:', '
docker compose pull app\ndocker compose up -d app
']

Тома и данные

['Именованный том db_data хранит базу между перезапусками. Даже docker compose down его не удалит — данные в безопасности.', '
  • Удалить контейнеры, но сохранить данные: docker compose down
  • Удалить всё вместе с томами: docker compose down -v (осторожно!)
', 'Ежедневные бэкапы MAATRIX снимают снапшот всего диска, включая тома Docker — если удалили том по ошибке, есть откуда восстановить.']

Частые ошибки

['
  • Порт занятbind: address already in use. Уже что-то слушает 80. Найдите: ss -tlnp | grep :80.
  • app стартует раньше db — depends_on ждёт запуск контейнера, но не готовность базы. Добавьте healthcheck или ретраи в приложении.
  • Изменили .yaml, а ничего не поменялось — нужно docker compose up -d заново, compose пересоздаст изменённые сервисы.
']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS под docker-стек

Частые вопросы

compose.yaml или docker-compose.yml?

Оба работают. Современное имя — compose.yaml, старое docker-compose.yml поддерживается для совместимости.

Можно ли собирать образ прямо в compose?

Да, вместо image укажите build: . с путём к Dockerfile. compose соберёт образ при docker compose build или up --build.

Как перезапустить весь стек?

docker compose restart перезапускает контейнеры без пересоздания. Для применения изменений в yaml используйте up -d.