2023年5月16日にdocker-composeのv2.18.0が公開されました。いくつかの機能拡張もあるのですが、その一つに、vizサブコマンドがあります。
vizサブコマンドは、docker composeのalphaコマンドのサブコマンドとして提供されています。alphaですから、EXPERIMENTAL FEATURE(実験的な機能)の位置付けとなります。
具体的な内容は、Pull Request #10376で見ることができますが、次のように実行することができます。前提条件として、graphvizパッケージにあるdotコマンドを使いますから、事前にインストールしておきます。
$ sudo apt install -y graphviz
上記のプルリクエストでサンプルとして上げられているのが、次のdocker-composeファイルになっています。
version: "3.9"
services:
service1:
image: guzmanbenjamin/service1
networks:
- internal-net
service2:
image: guzmanbenjamin/service2
networks:
- internal-net
depends_on:
- service1
- postgres
- mongo
postgres:
image: postgres
networks:
- internal-net
mongo:
image: mongo
command: --auth
networks:
- internal-net
gateway:
image: nginx
ports:
- "127.0.0.1:80:80"
- "443:443"
networks:
- internal-net
- public-net
depends_on:
- service1
- service2
networks:
internal-net:
external: true
public-net:
driver: bridge
enable_ipv6: true
このファイルを用意したら、次のようにコマンドを実行することができます。
$ docker compose alpha viz –ports –networks | dot -Tpng -O
ここでは、docker composeからDOT言語で出力された内容を、dotコマンドでpng形式に変換しています。出力ファイル名を指定することもできるのですが、ここでは自動生成としています。この場合には、noname.gv.pngというファイル名で出力されていますから、PNGファイルとして表示すると次のようになります。
docker-compose.ymlファイルに書かれているサービス群をグラフ表示することができました。内容としては、プルリクエストにあるものと同じですが、手元でdocker composeを実行して出力したものとなっています。