Как использовать команду docker compose alpha dry-run для тестирования изменений

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы научитесь использовать команду docker compose alpha dry-run для тестирования изменений в конфигурации Docker Compose без их фактического выполнения. Это ценный инструмент для проверки файла docker-compose.yaml и понимания потенциального воздействия команд перед их применением.

Вы начнёте с подготовки простого файла docker-compose.yaml. Затем вы будете использовать флаг dry-run с базовыми командами Docker Compose, чтобы наблюдать имитированный вывод и понимать, как команда будет работать. В завершение вы примените dry-run к команде, которая обычно вносит изменения, что позволит увидеть планируемые действия без внесения изменений в систему.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/ls -.-> lab-555069{{"Как использовать команду docker compose alpha dry-run для тестирования изменений"}} docker/ps -.-> lab-555069{{"Как использовать команду docker compose alpha dry-run для тестирования изменений"}} docker/create -.-> lab-555069{{"Как использовать команду docker compose alpha dry-run для тестирования изменений"}} docker/pull -.-> lab-555069{{"Как использовать команду docker compose alpha dry-run для тестирования изменений"}} docker/images -.-> lab-555069{{"Как использовать команду docker compose alpha dry-run для тестирования изменений"}} docker/info -.-> lab-555069{{"Как использовать команду docker compose alpha dry-run для тестирования изменений"}} docker/version -.-> lab-555069{{"Как использовать команду docker compose alpha dry-run для тестирования изменений"}} docker/network -.-> lab-555069{{"Как использовать команду docker compose alpha dry-run для тестирования изменений"}} end

Подготовка простого файла 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 правильно определил образ для сервиса web
  • ports: - показывает проброс портов. published: 80 указывает порт хоста, а target: 80 - порт контейнера, что соответствует нашему определению в docker-compose.yaml
  • container_name: my-compose-app-web-1 - Docker Compose автоматически генерирует имя контейнера на основе имени директории проекта и имени сервиса
  • build: - несмотря на указание image, Docker Compose включает секцию build с контекстом текущей директории. Это часть внутреннего представления и не означает, что образ будет собран, если указан только image
  • restart: '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 планирует:

  1. Создать сеть по умолчанию с именем my-compose-app_default
  2. Создать сервис с именем web
  3. Загрузить образ nginx:latest (если он отсутствует локально)
  4. Создать контейнер 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 и понимания потенциального воздействия команд перед их выполнением.