Docker Compose: многоконтейнерные приложения — туториал

Мы просто и по делу рассказываем про ИИ-инструменты для работы: сравнения, пошаговые гайды, бесплатные альтернативы и реальные сценарии применения. Помогаем выбрать между ChatGPT, Gemini, Claude, локальными моделями и десятками узкоспециализированных сервисов — от дизайна и HR до аналитики и SEO. Меньше хайпа, больше практики и экономии времени каждый день.

docker composedockerpostgresql

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

Когда нужен Docker Compose

  • локальная разработка
  • быстрый запуск стенда
  • тестирование микросервисов
  • единая конфигурация для команды

Вместо длинных docker run вы описываете сервисы в docker-compose.yml или compose.yaml.

Простой пример

Допустим, есть приложение app и PostgreSQL.

services:
  app:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db
    environment:
      DB_HOST: db
      DB_PORT: 5432
      DB_NAME: mydb
      DB_USER: user
      DB_PASSWORD: password

  db:
    image: postgres:16
    restart: always
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

Как запустить

  • docker compose up -d — запуск в фоне
  • docker compose ps — список контейнеров
  • docker compose logs -f — просмотр логов
  • docker compose down — остановка
  • docker compose down -v — остановка с удалением томов

Что важно понимать

  • 🔹 services — список контейнеров
  • 🔹 build — собрать образ из Dockerfile
  • 🔹 image — использовать готовый образ
  • 🔹 ports — проброс портов с хоста в контейнер
  • 🔹 depends_on — порядок запуска сервисов
  • 🔹 volumes — постоянное хранение данных
  • 🔹 environment — переменные окружения

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

  • думать, что depends_on ждёт полной готовности БД — это не так, он ждёт только запуск контейнера
  • хранить пароли прямо в файле — лучше использовать .env
  • не подключать volume для БД — данные пропадут после пересоздания контейнера
  • путать localhost и имя сервиса: внутри сети Compose приложение должно обращаться к БД по имени db, а не 127.0.0.1

Полезные практики

  • ✅ использовать .env для конфигурации
  • ✅ разделять dev и prod настройки
  • ✅ называть сервисы понятно: api, db, redis
  • ✅ добавлять healthcheck для критичных сервисов
  • ✅ не тащить Compose в production без понимания ограничений

Почему Compose любят разработчики

Он упрощает onboarding, делает окружение воспроизводимым и снижает количество ошибок “у меня работает”. Один файл описывает всю инфраструктуру проекта для локального запуска 🚀

Если вы изучаете Docker, Compose — обязательный шаг после базовых контейнеров: именно здесь начинается работа с реальными приложениями, а не с одиночными образами.

📌 Ниже стоит посмотреть подборку каналов про IT — там много полезного по Docker, DevOps, backend и инфраструктуре.

Читайте так же