Как использовать команду docker compose alpha viz для визуализации compose-файлов

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

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

Введение

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/port("List Container Ports") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/ls -.-> lab-555072{{"Как использовать команду docker compose alpha viz для визуализации compose-файлов"}} docker/ps -.-> lab-555072{{"Как использовать команду docker compose alpha viz для визуализации compose-файлов"}} docker/port -.-> lab-555072{{"Как использовать команду docker compose alpha viz для визуализации compose-файлов"}} docker/images -.-> lab-555072{{"Как использовать команду docker compose alpha viz для визуализации compose-файлов"}} docker/volume -.-> lab-555072{{"Как использовать команду docker compose alpha viz для визуализации compose-файлов"}} docker/network -.-> lab-555072{{"Как использовать команду docker compose alpha viz для визуализации compose-файлов"}} end

Генерация базового графа из compose-файла

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

Сначала необходимо установить Docker Compose. Так как он не предустановлен в среде LabEx, мы установим его с помощью pip.

sudo apt update
sudo apt install -y python3-pip
pip install docker-compose

После завершения установки вы можете проверить её, посмотрев версию Docker Compose.

docker-compose --version

Вы должны увидеть вывод, похожий на docker-compose version 1.29.2, build 5becea4c.

Теперь создадим простой Docker Compose файл. Перейдите в директорию проекта и создайте файл docker-compose.yml.

cd ~/project
nano docker-compose.yml

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

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: ubuntu:latest
    command: sleep infinity

Этот файл docker-compose.yml определяет два сервиса: web с образом nginx:latest и app с образом ubuntu:latest. Сервис web пробрасывает порт 80 хоста на порт 80 контейнера. Сервис app просто выполняет команду sleep infinity, чтобы контейнер продолжал работать.

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

docker-compose config --graph

Вывод будет на языке DOT, который используется для описания графов. Он покажет сервисы и их базовые связи. Например, вы можете увидеть что-то вроде:

digraph {
  compound=true
  "web" [label="web"]
  "app" [label="app"]
  "web" -> "app" [label="depends_on"]
}

Этот вывод в формате DOT представляет ориентированный граф, где web и app являются узлами, а стрелка от web к app помечена как "depends_on". Хотя в этом простом примере зависимости не определены явно, команда docker-compose config --graph может выводить некоторые взаимосвязи.

Включение образов сервисов в граф

На этом шаге вы научитесь включать образы сервисов в генерируемый граф. По умолчанию базовый граф показывает только названия сервисов. Добавление имён образов предоставляет больше контекста о том, что представляет каждый сервис.

Мы продолжим использовать файл docker-compose.yml, созданный на предыдущем шаге.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: ubuntu:latest
    command: sleep infinity

Чтобы включить образы сервисов в вывод графа, необходимо использовать флаг --images с командой docker-compose config --graph.

docker-compose config --graph --images

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

Например, вывод теперь может выглядеть так:

digraph {
  compound=true
  "web" [label="web\nnginx:latest"]
  "app" [label="app\nubuntu:latest"]
  "web" -> "app" [label="depends_on"]
}

Обратите внимание, что атрибут label для каждого узла теперь включает как название сервиса, так и имя образа, разделённые символом новой строки (\n). Это делает граф более информативным, показывая, какой образ Docker используется для каждого сервиса.

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

Включение сетей сервисов в граф

На этом шаге вы научитесь включать сети, к которым подключены ваши сервисы, в генерируемый граф. Понимание топологии сети крайне важно для отладки и визуализации потоков взаимодействия между контейнерами.

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

Откройте файл docker-compose.yml в директории проекта:

nano ~/project/docker-compose.yml

Измените содержимое, добавив определение сети и подключение сервисов к этой сети:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - my_network
  app:
    image: ubuntu:latest
    command: sleep infinity
    networks:
      - my_network

networks:
  my_network:
    driver: bridge

В обновлённом docker-compose.yml мы добавили раздел networks на верхнем уровне для определения сети my_network с драйвером bridge. Также мы добавили ключ networks для каждого сервиса (web и app), указывая их подключение к my_network.

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

docker-compose config --graph --networks

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

Вы увидите узлы для сервисов (web и app) и узел для сети (my_network). Будут присутствовать рёбра, соединяющие сервисы с сетью, что указывает на их принадлежность к этой сети. Такая визуализация помогает понять, как ваши сервисы изолированы или соединены на сетевом уровне.

Включение портов сервисов в граф

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

Мы продолжим использовать файл docker-compose.yml из предыдущих шагов.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - my_network
  app:
    image: ubuntu:latest
    command: sleep infinity
    networks:
      - my_network

networks:
  my_network:
    driver: bridge

Чтобы включить информацию о портах в вывод графа, используйте флаг --ports вместе с флагом --graph. Вы можете комбинировать несколько флагов для включения различной информации в граф. Давайте включим в граф образы, сети и порты.

docker-compose config --graph --images --networks --ports

Выполнение этой команды сгенерирует вывод графа в формате DOT, который теперь будет включать информацию о портах для каждого сервиса. Вывод станет ещё более детализированным, отображая имена сервисов, имена образов, сетевые подключения и маппинг портов.

Для сервиса web вы увидите маппинг портов 80:80, включённый в определение его узла. Это указывает, что порт 80 на хосте сопоставлен с портом 80 внутри контейнера web.

Вывод в формате DOT для узла сервиса web может выглядеть следующим образом:

"web" [label="web\nnginx:latest\n80:80"]

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

Настройка отступов в выходном графе

На этом шаге вы научитесь настраивать отступы в генерируемом выводе графа в формате DOT. Хотя стандартные отступы обычно приемлемы, вы можете захотеть изменить их для лучшей читаемости или соответствия определённым стандартам форматирования, если планируете дальнейшую обработку вывода.

Мы продолжим использовать файл docker-compose.yml из предыдущих шагов.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - my_network
  app:
    image: ubuntu:latest
    command: sleep infinity
    networks:
      - my_network

networks:
  my_network:
    driver: bridge

Для настройки отступов в выводе графа используйте флаг --indent с указанием количества пробелов. Давайте сгенерируем граф с включёнными образами, сетями и портами, установив отступ в 4 пробела.

docker-compose config --graph --images --networks --ports --indent 4

Выполнение этой команды создаст тот же граф, что и на предыдущем шаге, но строки в DOT-выводе будут иметь отступ в 4 пробела. Сравните вывод этой команды с предыдущим, чтобы увидеть разницу в отступах.

Например, часть вывода теперь может выглядеть так с отступом в 4 пробела:

digraph {
    compound=true
    "web" [label="web\nnginx:latest\n80:80"]
    "app" [label="app\nubuntu:latest"]
    "my_network" [label="my_network"]
    "web" -> "my_network" [label="network"]
    "app" -> "my_network" [label="network"]
    "web" -> "app" [label="depends_on"]
}

Вы можете экспериментировать с разными значениями отступов, чтобы увидеть, как это влияет на форматирование вывода. Эта опция предназначена в основном для эстетических целей или для инструментов, требующих определённого стиля отступов в DOT-файлах.

Итоги

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

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