Как использовать команду docker stack config для проверки объединенных файлов Compose

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

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

Введение

В этом практическом занятии вы узнаете, как использовать команду docker stack config для проверки итоговой, объединенной конфигурации ваших файлов Docker Compose. Это важный навык для понимания того, как Docker интерпретирует ваши определения в Compose, особенно при работе с несколькими файлами или переменными окружения. Вы начнете с вывода конфигурации из одного файла Compose, в том числе с необходимых шагов по установке Docker Compose в среде LabEx.

Затем вы изучите, как объединять и выводить конфигурацию из нескольких файлов Compose, показывая, как Docker комбинирует определения из разных источников. Вы также узнаете, как выводить конфигурацию непосредственно из стандартного ввода и как пропустить интерполяцию переменных окружения при генерации выходного конфигурационного файла. Эти шаги дадут вам полное понимание возможностей команды docker stack config для отладки и проверки ваших настроек Docker Compose.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/run -.-> lab-555233{{"Как использовать команду docker stack config для проверки объединенных файлов Compose"}} docker/ls -.-> lab-555233{{"Как использовать команду docker stack config для проверки объединенных файлов Compose"}} docker/exec -.-> lab-555233{{"Как использовать команду docker stack config для проверки объединенных файлов Compose"}} docker/create -.-> lab-555233{{"Как использовать команду docker stack config для проверки объединенных файлов Compose"}} docker/volume -.-> lab-555233{{"Как использовать команду docker stack config для проверки объединенных файлов Compose"}} end

Вывод итоговой конфигурации из одного файла Compose

На этом шаге вы узнаете, как вывести итоговую конфигурацию из одного файла Docker Compose. Это полезно для отладки или понимания конечного состояния вашего файла Compose после обработки всех переменных и расширений.

Сначала установим Docker Compose. Поскольку он не предустановлен в виртуальной среде LabEx, нам нужно скачать и установить его. Мы скачаем последнюю стабильную версию.

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

Эта команда скачивает бинарный файл Docker Compose из официального репозитория на GitHub. $(uname -s) и $(uname -m) используются для получения операционной системы и архитектуры виртуальной машины, чтобы убедиться, что вы скачиваете правильный бинарный файл.

Далее нужно дать скачанному бинарному файлу права на выполнение.

sudo chmod +x /usr/local/bin/docker-compose

Эта команда делает команду docker-compose исполняемой.

Теперь проверим установку, проверив версию.

docker-compose --version

Вы должны увидеть установленную версию Docker Compose, выведенную в консоль.

Перед тем, как мы сможем вывести конфигурацию, нам нужен файл Docker Compose. Создадим простой файл в директории ~/project.

nano ~/project/docker-compose.yaml

Вставьте следующее содержимое в файл docker-compose.yaml:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Это простой файл Compose, который определяет один сервис с именем web, используя образ nginx:latest и отображает порт 80 на хосте на порт 80 в контейнере.

Сохраните файл, нажав Ctrl + X, затем Y и Enter.

Теперь перейдите в директорию ~/project, где вы сохранили файл docker-compose.yaml.

cd ~/project

Для вывода итоговой конфигурации из этого файла Compose используем команду docker-compose config.

docker-compose config

Эта команда считывает файл docker-compose.yaml в текущей директории и выводит итоговую объединенную конфигурацию в стандартный вывод. Вы должны увидеть YAML - содержимое вашего файла docker-compose.yaml, возможно, с некоторыми дополнительными значениями по умолчанию, добавленными Docker Compose.

Объединение и вывод конфигурации из нескольких файлов Compose

На этом шаге вы узнаете, как объединять конфигурации из нескольких файлов Docker Compose и выводить итоговую объединенную конфигурацию. Это мощная функция, которая позволяет определить базовую конфигурацию, а затем переопределить или расширить ее с помощью дополнительных файлов. Это полезно для управления разными окружениями (например, разработки, тестирования и производства).

Мы продолжим работу в директории ~/project. На предыдущем шаге мы создали файл docker-compose.yaml. Теперь создадим еще один файл Compose для расширения базовой конфигурации. Назовем его docker-compose.override.yaml.

nano ~/project/docker-compose.override.yaml

Вставьте следующее содержимое в файл docker-compose.override.yaml:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html

Этот файл переопределения модифицирует сервис web, определенный в docker-compose.yaml. Он изменяет отображение порта хоста с 80 на 8080 и добавляет монтирование тома для обслуживания статического HTML - контента из локальной директории с именем html.

Сохраните файл, нажав Ctrl + X, затем Y и Enter.

Теперь создадим директорию html и простой файл index.html в ней.

mkdir ~/project/html
nano ~/project/html/index.html

Вставьте следующее содержимое в файл ~/project/html/index.html:

<h1>Hello from Nginx!</h1>

Сохраните файл, нажав Ctrl + X, затем Y и Enter.

По умолчанию Docker Compose автоматически ищет файлы docker-compose.yaml и docker-compose.override.yaml в текущей директории и объединяет их. Конфигурации в файле переопределения имеют приоритет.

Чтобы увидеть объединенную конфигурацию, убедитесь, что вы находитесь в директории ~/project и снова запустите команду docker-compose config.

cd ~/project
docker-compose config

Теперь вы должны увидеть объединенную конфигурацию, где сервис web имеет отображение порта 8080:80 и монтирование тома ./html:/usr/share/nginx/html.

Вы также можете явно указать, какие файлы Compose использовать с помощью флага -f. Порядок, в котором вы указываете файлы, имеет значение, так как более поздние файлы переопределяют более ранние.

Например, чтобы явно объединить docker-compose.yaml и docker-compose.override.yaml, вы можете запустить:

docker-compose -f docker-compose.yaml -f docker-compose.override.yaml config

В этом случае это даст тот же объединенный вывод, что и запуск docker-compose config без флага -f, так как docker-compose.override.yaml автоматически обнаруживается и объединяется после docker-compose.yaml.

Вывод конфигурации из стандартного ввода (stdin)

На этом шаге вы узнаете, как вывести итоговую конфигурацию из файла Docker Compose, предоставленного через стандартный ввод (stdin). Это полезно, когда вы хотите динамически сгенерировать файл Compose или передать вывод другой команды напрямую в команду docker-compose config.

Мы продолжим работу в директории ~/project. Вместо чтения из файла мы передадим содержимое конфигурации Compose напрямую в команду docker-compose config.

Используем команду cat для вывода содержимого файла docker-compose.yaml и передадим его в команду docker-compose config.

cd ~/project
cat docker-compose.yaml | docker-compose config -f -

В этой команде:

  • cat docker-compose.yaml выводит содержимое файла docker-compose.yaml в стандартный вывод.
  • | - это оператор конвейера (pipe), который перенаправляет стандартный вывод команды cat в стандартный ввод команды docker-compose config.
  • docker-compose config -f - сообщает команде docker-compose config прочитать конфигурацию из стандартного ввода (-), а не из файла.

Вы должны увидеть такой же вывод, как при запуске команды docker-compose config на первом шаге, то есть конфигурацию из файла docker-compose.yaml.

Вы также можете напрямую передать другую конфигурацию. Например, передадим простую конфигурацию для сервиса redis.

echo "version: '3.8'\nservices:\n  redis:\n    image: redis:latest" | docker-compose config -f -

В этой команде:

  • echo "version: '3.8'\nservices:\n redis:\n image: redis:latest" выводит YAML - строку для простого файла Compose с сервисом redis. Символ \n создает новые строки в выводе.
  • | передает эту строку в команду docker-compose config.
  • docker-compose config -f - читает конфигурацию из стандартного ввода.

Вывод должен быть YAML - конфигурацией для сервиса redis.

Этот метод особенно полезен, когда вы генерируете конфигурации Compose программно или когда вы хотите быстро протестировать конфигурацию без сохранения ее в файл.

Вывод объединенной конфигурации с пропуском интерполяции переменных

На этом шаге вы узнаете, как вывести объединенную конфигурацию из нескольких файлов Docker Compose, пропуская интерполяцию переменных. По умолчанию команда docker-compose config выполняет интерполяцию переменных окружения. Пропуск интерполяции может быть полезен, когда вы хотите увидеть исходную конфигурацию с сохраненными переменными, например, при отладке или создании шаблона.

Мы продолжим работу в директории ~/project с нашими файлами docker-compose.yaml и docker-compose.override.yaml.

Сначала добавим переменную окружения в файл docker-compose.yaml, чтобы продемонстрировать интерполяцию.

nano ~/project/docker-compose.yaml

Измените файл docker-compose.yaml, чтобы включить переменную окружения в имя образа:

version: "3.8"
services:
  web:
    image: nginx:${NGINX_VERSION:-latest}
    ports:
      - "80:80"

Здесь ${NGINX_VERSION:-latest} - это переменная, которая будет заменена значением переменной окружения NGINX_VERSION. Если переменная NGINX_VERSION не установлена, то по умолчанию будет использовано значение latest.

Сохраните файл, нажав Ctrl + X, затем Y и Enter.

Теперь установим переменную окружения NGINX_VERSION и запустим команду docker-compose config, чтобы увидеть, как работает интерполяция.

cd ~/project
export NGINX_VERSION=1.21
docker-compose config

Вы должны увидеть объединенную конфигурацию, и имя образа для сервиса web теперь должно быть nginx:1.21.

Чтобы вывести объединенную конфигурацию без интерполяции переменных, используем флаг --no-interpolate с командой docker-compose config.

docker-compose --no-interpolate config

На этот раз в выводе имя образа должно быть nginx:${NGINX_VERSION:-latest}, с сохраненным заполнителем переменной, даже если переменная окружения NGINX_VERSION установлена.

Этот флаг полезен, когда вы хотите увидеть точную конфигурацию, как она написана в ваших файлах Compose, до любого подстановочного замещения переменных.

Резюме

В этом практическом занятии вы узнали, как использовать команду docker-compose config для проверки итоговой конфигурации файлов Docker Compose. Вы начали с установки Docker Compose в виртуальной среде LabEx, убедившись, что скачали правильный бинарный файл для архитектуры системы и дали ему права на выполнение. Затем вы проверили установку, проверив версию.

После установки вы создали простой файл docker-compose.yaml, определяющий базовый веб - сервис. Затем вы использовали команду docker-compose config для вывода итоговой конфигурации из этого одного файла Compose, показав, как просмотреть обработанное состояние вашего определения Compose.