如何使用 docker compose alpha viz 命令可视化 compose 文件

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何使用 docker-compose alpha viz 命令有效地可视化你的 Docker Compose 文件。通过这个动手实践,你将逐步掌握生成基础服务关系图的方法,并学习如何逐步增强这些可视化效果——包括添加服务镜像、网络和端口信息。你还将了解如何通过调整输出图的缩进来提升可读性。

完成本实验后,你将能够为 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 文件定义了两个服务:使用 nginx:latest 镜像的 web 服务和使用 ubuntu:latest 镜像的 app 服务。web 服务将主机的 80 端口映射到容器内的 80 端口。app 服务则简单地运行 sleep infinity 命令来保持容器运行。

要从此 compose 文件生成基础关系图,你将使用带有 --graph 标志的 docker-compose config 命令。该命令会解析 compose 文件并以 DOT 格式输出关系图表示。

docker-compose config --graph

输出将是 DOT 语言格式,这是一种图形描述语言。它会显示服务及其基本连接关系。例如,你可能会看到类似以下内容:

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

这个 DOT 输出表示一个有向图,其中 webapp 是节点,并且有一条从 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

要在关系图输出中包含服务镜像信息,你需要在 docker-compose config --graph 命令后添加 --images 参数:

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 驱动。同时我们在每个服务(webapp)下添加了 networks 键,指定它们应该连接到 my_network

现在,要在关系图输出中包含网络信息,你需要在 --graph 标志后添加 --networks 标志:

docker-compose config --graph --networks

执行该命令将生成 DOT 格式的关系图输出,现在会包含代表网络的节点以及显示哪些服务连接到该网络的边。输出会比之前更复杂,展示了网络连接关系。

你将看到代表服务的节点(webapp)以及代表网络的节点(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

要在关系图输出中包含服务端口信息,你需要在 --graph 标志后添加 --ports 标志。你可以组合多个标志来在关系图中包含不同类型的信息。让我们在关系图中同时包含镜像、网络和端口信息:

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

执行该命令将生成 DOT 格式的关系图输出,现在会包含每个服务的端口信息。输出会更加详细,展示服务名称、镜像名称、网络连接和端口映射。

对于 web 服务,你将看到端口映射 80:80 包含在其节点定义中。这表示主机的 80 端口映射到了 web 容器内部的 80 端口。

web 服务节点的 DOT 输出可能如下所示:

"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 config --graph 命令可视化 Docker Compose 文件。你首先安装了 Docker Compose 并创建了一个包含两个服务的基础 docker-compose.yml 文件。随后,你生成了该文件的 DOT 格式基础关系图,直观展示了服务及其相互关系。

在基础可视化的基础上,你进一步探索了如何在关系图中包含更多细节。这包括将服务镜像、网络和端口信息整合到可视化输出中,从而更全面地展示 compose 文件的配置。最后,你还学习了如何自定义输出关系图的缩进格式以提升可读性。