← Назад к вопросам

Как организована работа с Docker Compose

1.0 Junior🔥 241 комментариев
#Docker и контейнеризация

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как организована работа с Docker Compose

Docker Compose — это инструмент для определения и запуска мультиконтейнерных Docker приложений. Он позволяет описать весь stack (базу данных, приложение, кэш, очередь сообщений) в одном YAML файле и управлять им как единым целым.

Базовая структура docker-compose.yml

version: '3.9'

services:
  # Frontend приложение
  web:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
      - API_URL=http://api:8000
    depends_on:
      - api
    volumes:
      - ./frontend:/app
      - /app/node_modules
    networks:
      - app-network

  # Backend приложение
  api:
    build:
      context: ./backend
      dockerfile: Dockerfile
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://user:password@db:5432/myapp
      - REDIS_URL=redis://redis:6379
    depends_on:
      - db
      - redis
    volumes:
      - ./backend:/app
    networks:
      - app-network

  # PostgreSQL база данных
  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=myapp
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - app-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U user"]
      interval: 10s
      timeout: 5s
      retries: 5

  # Redis для кэширования
  redis:
    image: redis:7-alpine
    networks:
      - app-network

volumes:
  postgres_data:

networks:
  app-network:
    driver: bridge

Основные команды Docker Compose

# Запуск всех сервисов в фоне
docker compose up -d

# Просмотр логов в реальном времени
docker compose logs -f api

# Логи конкретного сервиса
docker compose logs db

# Остановка всех сервисов
docker compose stop

# Перезапуск сервисов
docker compose restart api

# Удаление контейнеров, сетей (volumes остаются)
docker compose down

# Удаление всего включая volumes
docker compose down -v

# Запуск одного сервиса
docker compose up db

# Выполнение команды в контейнере
docker compose exec api bash

# Просмотр статуса сервисов
docker compose ps

Лучшие практики организации

Разделение окружений — использую разные compose файлы:

docker-compose.yml       # базовый файл
docker-compose.dev.yml   # переопределение для dev
docker-compose.prod.yml  # для production
# Запуск с переопределениями:
docker compose -f docker-compose.yml -f docker-compose.dev.yml up

Environment файлы — не коммитить чувствительные данные:

# .env.example (коммитится в Git)
DATABASE_PASSWORD=changeme
API_KEY=changeme

# .env (в .gitignore)
DATABASE_PASSWORD=real_password
API_KEY=real_key

# При запуске:
docker compose --env-file .env up

Volumes для development — для live reload кода:

services:
  api:
    volumes:
      - ./backend:/app  # mount source code
      - /app/node_modules  # но не node_modules

Health checks — для правильного порядка запуска:

services:
  db:
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s
      timeout: 10s
      retries: 3

Workflow разработки

# 1. Клонирование репозитория
git clone ...
cd project

# 2. Подготовка .env файла
cp .env.example .env
# редактируем .env с реальными значениями

# 3. Запуск всего stack
docker compose up -d

# 4. Проверка логов
docker compose logs -f

# 5. Запуск миграций БД
docker compose exec api python manage.py migrate

# 6. Работа в веб браузере
# http://localhost:3000 - frontend
# http://localhost:8000 - API

# 7. Остановка при завершении
docker compose down

Docker Compose незаменим для локальной разработки, интеграционного тестирования и быстрого развертывания всей инфраструктуры локально. Это экономит часы на настройку окружения для новых разработчиков.

Как организована работа с Docker Compose | PrepBro