Docker Compose — инструмент для запуска многоконтейнерных приложений. Один файл docker-compose.yml заменяет несколько длинных docker run команд. Всё приложение поднимается одной командой.

- Зачем нужен Docker Compose
- Установка Docker Compose
- Основные команды
- Полный цикл работы
- Переменные окружения через .env
- Масштабирование сервисов
- docker run vs docker compose
- Часто задаваемые вопросы
- docker compose up vs docker compose start — в чём разница?
- Как обновить образы в docker compose?
- docker compose down удаляет данные?
- Что читать дальше по Docker
Зачем нужен Docker Compose
Без Compose — запуск приложения (app + db + nginx) выглядит так:
docker network create mynet
docker volume create pgdata
docker run -d \
--name db \
--network mynet \
-v pgdata:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=secret \
postgres:16
docker run -d \
--name app \
--network mynet \
-p 5000:5000 \
myapp:latest
docker run -d \
--name nginx \
--network mynet \
-p 80:80 \
nginx
С Compose — одна команда:
docker compose up -d
Установка Docker Compose
# Docker Desktop (Windows/Mac) — Compose уже включён
docker compose version
# Linux — установить как плагин
sudo apt install docker-compose-plugin
# Проверить
docker compose version
# Docker Compose version v2.27.0
# Старый docker-compose (v1) — устаревший, не рекомендуется
# Новый: docker compose (через пробел, встроен в Docker CLI)
Основные команды
# Запустить все сервисы
docker compose up
# В фоне (detached)
docker compose up -d
# Пересобрать образы и запустить
docker compose up -d --build
# Остановить контейнеры (не удалять)
docker compose stop
# Остановить и удалить контейнеры + сети
docker compose down
# Остановить, удалить контейнеры, сети И volumes
docker compose down -v
# Статус сервисов
docker compose ps
# Логи всех сервисов
docker compose logs
docker compose logs -f # следить
# Логи конкретного сервиса
docker compose logs -f app
# Выполнить команду в сервисе
docker compose exec app bash
docker compose exec db psql -U postgres
# Перезапустить один сервис
docker compose restart app
# Собрать образы без запуска
docker compose build
docker compose build app # только один сервис
Полный цикл работы
# 1. Запустить
docker compose up -d
# 2. Проверить статус
docker compose ps
# NAME IMAGE COMMAND SERVICE STATUS PORTS
# app myapp ... app running 0.0.0.0:5000->5000/tcp
# db postgres ... db running 5432/tcp
# nginx nginx ... nginx running 0.0.0.0:80->80/tcp
# 3. Логи
docker compose logs -f
# 4. Войти в контейнер
docker compose exec app bash
# 5. Обновить код и пересобрать
docker compose up -d --build app
# 6. Остановить (данные в volumes сохраняются)
docker compose down
# 7. Остановить и удалить всё включая данные
docker compose down -v
Переменные окружения через .env
# .env файл (автоматически подхватывается docker compose)
POSTGRES_PASSWORD=mysecretpassword
APP_PORT=5000
DB_NAME=myapp
# docker-compose.yml
services:
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${DB_NAME}
app:
image: myapp
ports:
- "${APP_PORT}:5000"
Масштабирование сервисов
# Запустить 3 экземпляра сервиса app
docker compose up -d --scale app=3
# Проверить
docker compose ps
# app-1, app-2, app-3 — все запущены
# Уменьшить до 1
docker compose up -d --scale app=1
docker run vs docker compose
| docker run | docker compose | |
|---|---|---|
| Один контейнер | ✅ Удобно | Избыточно |
| Несколько контейнеров | Много команд | ✅ Один файл |
| Версионирование | Команды в скрипте | ✅ YAML файл в git |
| Переменные окружения | -e флаги | ✅ .env файл |
| Воспроизводимость | Сложнее | ✅ Легко |
| Для разработки | Ок для одного | ✅ Идеально |
Часто задаваемые вопросы
docker compose up vs docker compose start — в чём разница?
docker compose up — создаёт контейнеры (если их нет) и запускает их. Если образ изменился — пересоздаёт. docker compose start — запускает уже существующие остановленные контейнеры. Аналогично разнице между docker run и docker start. Для первого запуска — всегда up. Для возобновления после docker compose stop — можно start.
Как обновить образы в docker compose?
Три шага: 1) docker compose pull — скачать новые версии образов. 2) docker compose up -d — пересоздать контейнеры с новыми образами. Compose автоматически пересоздаст только те контейнеры, образ которых изменился. Для собственных образов: docker compose up -d --build — пересобрать и перезапустить.
docker compose down удаляет данные?
docker compose down — удаляет контейнеры и сети, но не удаляет volumes. Данные в named volumes (базы данных) сохраняются. docker compose down -v — удаляет всё включая volumes. Будь осторожен с флагом -v в продакшне — это удалит данные баз данных.
Что читать дальше по Docker
Чтобы связать тему с соседними практическими материалами, дальше удобно открыть:
- docker-compose.yml — разобрать синтаксис docker-compose.yml.
- Python Flask в Docker — развернуть Flask-приложение с несколькими сервисами.
- PostgreSQL в Docker — добавить PostgreSQL в проект.
- Redis в Docker — добавить Redis в проект.



