CohortX
Блог

Поднять базу и приложение вместе: знакомство с Compose

2 августа 2026 г. · 2 мин чтения · Read in English · Антон Молотило

Зачем это

Одна команда запуска хороша для одного контейнера. Но настоящий проект — это минимум приложение и база, а часто ещё хранилище для кэша и вспомогательные службы.

Запускать их по одной, помня все флаги и порядок, неудобно. Файл описания решает это: все службы перечислены в одном месте, запуск одной командой.

Побочная польза: этот файл — готовая инструкция по запуску проекта. Человек, открывший ваш репозиторий, видит устройство сразу.

Минимальный файл

Файл описания служб в корне проекта:

services:
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: notes
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  app:
    build: .
    depends_on:
      - db
    environment:
      DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@db:5432/notes
    ports:
      - "8000:8000"

volumes:
  pgdata:

Что здесь важно

Обращение по имени службы. Приложение подключается к базе по адресу «db», а не по числовому адресу. Внутри общей сети контейнеры находят друг друга по именам — это самое неочевидное для новичков.

Постоянное хранилище. Раздел с томами нужен, чтобы данные базы пережили пересоздание контейнера. Без него всё исчезает при остановке — классическая потеря учебных данных.

Пароли из окружения. Значения берутся из файла с переменными, который не попадает в репозиторий. В самом описании паролей быть не должно.

Зависимость запуска. Указание, что приложение стартует после базы. Оговорка: это гарантирует порядок запуска, но не готовность базы принимать подключения. Для учебного проекта достаточно, для боевого нужна проверка готовности.

Команды

Запустить всё:

docker compose up

В фоне:

docker compose up -d

Пересобрать образ приложения:

docker compose up --build

Посмотреть журналы:

docker compose logs -f app

Остановить:

docker compose down

Остановить и удалить данные:

docker compose down -v

Последняя команда стирает хранилище. Удобно, когда хотите начать с чистой базы, и опасно, когда не хотите.

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

Пароль прямо в файле описания. Файл лежит в репозитории — значит, пароль раскрыт.

Забыли постоянное хранилище. Перезапустили — данные пропали.

Порт занят. Если на машине уже стоит база, стандартный порт занят. Пробросьте другой снаружи.

Приложение не видит базу. Почти всегда причина в том, что в строке подключения указан локальный адрес вместо имени службы.

Что это даёт в портфолио

Проект, который запускается одной командой, приятно открывать. Это показывает, что вы думали не только о коде, но и о том, как этим пользоваться.

Плюс в командной работе такой файл экономит часы: новый участник не тратит день на настройку окружения, а запускает всё одной командой и начинает работать.

Хватит читать — пора делать

На CohortX можно найти команду под пет-проект и получить тот самый опыт, о котором спрашивают на собеседовании.

Похожие статьи