ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

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:ro

web — имя сервиса. 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 web

config разбирает 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 down

Stop сохраняет контейнер, 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 и проверками готовности.

Источники