Docker Compose: первый пошаговый туториал для начинающих
Автор: Казачкин Даниил Михайлович · Обновлено
Этот русскоязычный Docker Compose tutorial для начинающих актуализирован в 2026 году. Мы опишем маленькое веб-приложение файлом compose.yaml, запустим его, проверим ответ и…
Этот русскоязычный Docker Compose tutorial для начинающих актуализирован в 2026 году. Мы опишем маленькое веб-приложение файлом compose.yaml, запустим его, проверим ответ и удалим учебное окружение. Современная команда — docker compose с пробелом. Старые материалы с отдельным docker-compose могут требовать адаптации; номер установленного плагина проверяется через docker compose version.
Подготовим страницу
Создайте отдельную папку compose-first и внутри неё файл index.html:
<!doctype html>
<html lang="ru">
<meta charset="UTF-8">
<title>Первый Compose</title>
<h1>Приложение работает</h1>
</html>Рядом создайте полный compose.yaml:
name: dk-compose-first
services:
web:
image: python:3.13-slim
working_dir: /site
command: ["python", "-m", "http.server", "8000", "--bind", "0.0.0.0"]
ports:
- "127.0.0.1:18085:8000"
volumes:
- ./index.html:/site/index.html:roweb — имя сервиса. Image выбирает готовый Python; command запускает учебный HTTP-сервер. Это сервер для практики, а не готовый production-сервер. Внутренний порт — 8000, внешний — 18085. Read-only mount предоставляет только нашу страницу и запрещает контейнеру переписывать этот файл. Файл index.html нужно создать до запуска: иначе короткая запись mount может привести к созданию каталога вместо ожидаемого файла.
Проверяем и запускаем
Из папки проекта выполните:
docker compose config
docker compose up -d
docker compose ps
docker compose logs --tail 20 webconfig разбирает YAML и показывает итоговую конфигурацию. Он полезен до изменения окружения, но не доказывает, что приложение сможет запуститься. После up в ps должен быть работающий web с публикацией порта. Откройте http://127.0.0.1:18085/ в браузере или запросите его curl: ожидается заголовок «Приложение работает». Рабочий цикл Compose.
Флаг -d оставляет сервис в фоне. Без него терминал показывает объединённые логи, а Ctrl+C останавливает запущенные таким способом сервисы. При запуске в фоне для остановки используйте отдельную команду Compose. Поведение up.
Изменение и повторный запуск
Измените текст в index.html и обновите браузер: bind mount сразу даёт контейнеру актуальный файл, поэтому сборка здесь не нужна. Это отличается от COPY в Dockerfile, где файл становится частью образа и требует новой сборки.
Если изменить порт в YAML, повторный docker compose up -d согласует контейнер с конфигурацией и при необходимости пересоздаст его. docker compose restart только перезапускает существующие контейнеры; изменения YAML он не применяет как новый up.
Проект, сервис и контейнер
Имя проекта объединяет контейнеры и сеть окружения. Здесь оно явно задано dk-compose-first; флаг -p может его переопределить. Сервис называется web, а реальное имя контейнера Compose формирует из проекта, сервиса и номера. Поэтому обращайтесь к сервису: docker compose exec web python --version, не запоминайте автоматически созданное имя контейнера. Выбор имени проекта.
Остановка и уборка
docker compose stop
docker compose start
docker compose downStop сохраняет контейнер, start запускает его снова, down удаляет контейнеры и стандартную сеть проекта. Исходный index.html остаётся на компьютере. Если в будущем добавите именованные тома, обычный down их сохраняет; down -v меняет это поведение и требует понимания ценности данных.
Ошибки и практика
no configuration file provided обычно означает неверную рабочую папку или имя файла. Проверьте путь либо укажите docker compose -f /путь/compose.yaml config. При port is already allocated выберите свободный внешний порт. Если браузер получает список файлов вместо страницы, проверьте имя index.html, mount и working_dir.
Самостоятельно добавьте в страницу время занятия, смените внешний порт на 18086 и примените конфигурацию. Докажите три результата: новый текст виден, адрес с новым портом работает, после down страница недоступна, но исходный файл существует. Следующий шаг — собственный Dockerfile и сборка приложения, а затем Compose с PostgreSQL и проверками готовности.