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

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

docker-compose: запуск целого стека на VPS
Блог MAATRIX · 2026-07-07

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

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Идея compose

Один файл compose.yaml описывает все сервисы, их образы, порты, тома и связи. Команда docker compose up поднимает всё сразу, down — гасит.

Плюс: конфигурация лежит в git, разворачивается идентично на любом сервере. Это инфраструктура как код в миниатюре.

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

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

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

Рабочий compose.yaml

Стек из веб-приложения, PostgreSQL и nginx. Создаём файл в папке проекта:

services:
  db:
    image: postgres:16
    restart: always
    environment:
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: appdb
    volumes:
      - db_data:/var/lib/postgresql/data

  app:
    image: myapp:latest
    restart: always
    depends_on:
      - db
    environment:
      DATABASE_URL: postgres://postgres:secret@db:5432/appdb

  proxy:
    image: nginx:latest
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - app

volumes:
  db_data:

Обратите внимание: app обращается к базе по имени сервиса db, а не по IP — compose создаёт внутреннюю сеть с DNS.

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

docker compose up -d
docker compose ps

Флаг -d запускает в фоне. Логи всего стека или одного сервиса:

docker compose logs -f
docker compose logs -f app

Обновить один сервис после нового образа:

docker compose pull app
docker 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-стек

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

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

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.