Введение
В этой лабораторной работе вы научитесь использовать команду docker compose alpha dry-run для тестирования изменений в конфигурации Docker Compose без их фактического выполнения. Это ценный инструмент для проверки файла docker-compose.yaml и понимания потенциального воздействия команд перед их применением.
Вы начнёте с подготовки простого файла docker-compose.yaml. Затем вы будете использовать флаг dry-run с базовыми командами Docker Compose, чтобы наблюдать имитированный вывод и понимать, как команда будет работать. В завершение вы примените dry-run к команде, которая обычно вносит изменения, что позволит увидеть планируемые действия без внесения изменений в систему.
Подготовка простого файла docker-compose.yaml
На этом шаге мы подготовим простой файл docker-compose.yaml. Этот файл будет определять базовый сервис, который мы сможем использовать для демонстрации функциональности dry-run в Docker Compose.
Сначала нам необходимо установить Docker Compose. Поскольку он не предустановлен в этой среде, мы загрузим бинарный файл и сделаем его исполняемым.
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Эта команда загружает бинарный файл Docker Compose для архитектуры вашей системы и сохраняет его в /usr/local/bin/docker-compose. Команда chmod +x делает файл исполняемым.
Теперь проверим, что Docker Compose установлен корректно, посмотрев его версию.
docker-compose version
Вы должны увидеть вывод с указанием установленной версии Docker Compose.
Далее создадим директорию для нашего проекта и перейдём в неё.
mkdir ~/project/my-compose-app
cd ~/project/my-compose-app
Теперь мы находимся в директории ~/project/my-compose-app, где создадим наш файл docker-compose.yaml.
Создадим файл docker-compose.yaml с помощью редактора nano.
nano docker-compose.yaml
В редакторе nano вставим следующее содержимое:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
Этот файл docker-compose.yaml определяет один сервис с именем web. Сервис использует Docker-образ nginx:latest и пробрасывает порт 80 на хосте в порт 80 контейнера.
Сохраним файл, нажав Ctrl + O, затем Enter, и выйдем из редактора, нажав Ctrl + X.
Теперь мы успешно создали простой файл docker-compose.yaml.
Использование dry-run с базовой командой compose
На этом шаге мы применим флаг dry-run с базовой командой Docker Compose, чтобы понять принцип его работы. Флаг dry-run позволяет увидеть, какие действия выполнил бы Docker Compose, фактически не выполняя их. Это полезно для понимания потенциального воздействия команды перед её выполнением.
Мы будем использовать команду docker-compose config с флагом dry-run. Команда config проверяет и отображает конфигурацию файла Compose. Добавление dry-run к этой команде не меняет её поведение существенно, так как config уже является недеструктивной командой, но это хорошая отправная точка для понимания синтаксиса флага.
Сначала убедитесь, что находитесь в директории с вашим файлом docker-compose.yaml.
cd ~/project/my-compose-app
Теперь выполните команду docker-compose config --dry-run.
docker-compose config --dry-run
Вы должны увидеть распарсенную конфигурацию вашего файла docker-compose.yaml, выведенную в консоль. В данном случае вывод идентичен результату выполнения docker-compose config без флага dry-run, поскольку config по своей природе уже является операцией dry-run.
Вывод подтверждает, что Docker Compose успешно обработал ваш файл docker-compose.yaml и понимает определённые в нём сервисы и конфигурации.
Анализ вывода команды dry-run
На этом шаге мы внимательно изучим вывод команды docker-compose config --dry-run, выполненной ранее. Понимание этого вывода крайне важно для того, чтобы увидеть, как Docker Compose интерпретирует ваш файл docker-compose.yaml.
Вывод представляет собой проверенную конфигурацию в формате YAML. Он показывает, как Docker Compose понимает определённые в файле сервисы, сети и тома.
Рассмотрим ключевые части вывода на основе нашего простого docker-compose.yaml:
services:
web:
build:
context: /home/labex/project/my-compose-app
container_name: my-compose-app-web-1
image: nginx:latest
ports:
- published: 80
target: 80
restart: "no"
В секции services вы увидите сервис web:
image: nginx:latest- подтверждает, что Docker Compose правильно определил образ для сервисаwebports:- показывает проброс портов.published: 80указывает порт хоста, аtarget: 80- порт контейнера, что соответствует нашему определению вdocker-compose.yamlcontainer_name: my-compose-app-web-1- Docker Compose автоматически генерирует имя контейнера на основе имени директории проекта и имени сервисаbuild:- несмотря на указаниеimage, Docker Compose включает секциюbuildс контекстом текущей директории. Это часть внутреннего представления и не означает, что образ будет собран, если указан толькоimagerestart: 'no'- Docker Compose по умолчанию устанавливает политику перезапускаno, если она не указана
Этот вывод представляет финальную конфигурацию, которую Docker Compose использовал бы при выполнении команды типа docker-compose up. Флаг dry-run при использовании с командами, которые могут вносить изменения (что мы увидим в следующем шаге), покажет действия, которые были бы выполнены, а не только конфигурацию.
Для команды config флаг dry-run в основном служит для проверки синтаксиса и структуры вашего файла docker-compose.yaml. При наличии синтаксических ошибок команда config (с флагом dry-run или без) сообщит о них.
Использование dry-run с командой, вносящей изменения
На этом шаге мы применим флаг dry-run с командой Docker Compose, которая обычно вносит изменения в систему, например docker-compose up. Это продемонстрирует, как dry-run может показать планируемые действия без фактического создания контейнеров или сетей.
Команда docker-compose up без dry-run выполняет следующие действия: загружает указанные образы (если они отсутствуют локально), создает сети и запускает контейнеры на основе вашего файла docker-compose.yaml. Добавив флаг dry-run, мы можем увидеть шаги, которые были бы выполнены, без их фактического выполнения.
Сначала убедитесь, что находитесь в правильной директории:
cd ~/project/my-compose-app
Теперь выполните команду docker-compose up --dry-run:
docker-compose up --dry-run
Вы увидите вывод, указывающий на действия, которые Docker Compose выполнил бы. Для нашего простого docker-compose.yaml вывод может выглядеть примерно так:
Would create network "my-compose-app_default"
Would create service "web"
Would pull image "nginx:latest"
Would create container "my-compose-app-web-1"
Этот вывод четко показывает, что Docker Compose планирует:
- Создать сеть по умолчанию с именем
my-compose-app_default - Создать сервис с именем
web - Загрузить образ
nginx:latest(если он отсутствует локально) - Создать контейнер
my-compose-app-web-1для сервисаweb
Важно отметить, что ни одно из этих действий фактически не выполняется. Не создается сеть, не загружается образ и не запускается контейнер. Флаг dry-run предотвращает любые реальные изменения в вашем Docker-окружении.
Это чрезвычайно полезно для:
- Предварительного просмотра изменений: Перед развертыванием сложного приложения вы можете использовать
dry-run, чтобы точно увидеть, что сделает Docker Compose - Диагностики проблем: Если команда
docker-compose upзавершается с ошибкой,dry-runпоможет понять начальные шаги и выявить потенциальные проблемы в конфигурации - Обучения: Позволяет экспериментировать с различными конфигурациями
docker-compose.yamlи видеть их влияние без изменений в системе
Флаг dry-run также можно использовать с другими командами Docker Compose, такими как down, start, stop и rm, чтобы увидеть, какие ресурсы были бы затронуты.
Резюме
В этой лабораторной работе мы изучили, как подготовить простой файл docker-compose.yaml, сначала установив Docker Compose, а затем создав директорию и YAML-файл с базовым определением сервиса Nginx. Далее мы исследовали использование флага dry-run с командами Docker Compose.
Мы увидели, как флаг dry-run позволяет предварительно просмотреть действия, которые выполнила бы команда, без внесения реальных изменений в систему. Это ценный инструмент для тестирования изменений в файле docker-compose.yaml и понимания потенциального воздействия команд перед их выполнением.



