Comment générer un graphe depuis compose.yaml
Visualisez instantanément l'architecture de votre Docker Compose. Utilisez `compose-viz` pour générer un graphe clair des services, dépendances et ports exposés à partir de votre fichier `compose.yaml`.
Traduction automatique
Cet article a plus d'un an. Les informations peuvent être obsolètes.
Cet article fait partie de la série Diagrammes as code :
- Docker - Des diagrammes en tant que code
- Créer une mind map avec Docker et Markdown
- Afficher un fichier JSON sous forme de mind map
- Comment générer un graphe depuis compose.yaml
- Drawdb-app - Rendez votre modèle de base de données en png, markdown, mermaid, ...
- Python - Générer des flux avec pydot
- Obtenir une mindmap plus attrayante avec Markmap et Quarto
- Documentation as Code - Transformez votre infrastructure en diagrammes soignés avec Python et Mermaid
Journal des modifications
--format flag
Cet article montre comment visualiser un fichier compose.yaml sous forme de graphe de dépendances avec l'image Docker compose-viz. Le résultat est une image (PNG, SVG et d'autres formats via --format) qui affiche d'un coup d'œil les services, leurs dépendances et les ports exposés — pratique pour comprendre de grosses architectures Docker multi-services. On y parle aussi de docker compose config pour résoudre et fusionner plusieurs fichiers .yml et variables avant la visualisation.
Imaginez que vous ayez un très gros fichier compose.yaml avec beaucoup de services et de dépendances.
Vous avez aussi plusieurs ports exposés.
Vous aimeriez avoir une vue d'ensemble des services, des dépendances et des ports ouverts. C'est possible ? Oui ! https://github.com/compose-viz/compose-viz fait la magie pour nous.
Voici ce que compose-viz génère à partir d'un compose.yaml Joomla :
Comment interpréter l'image ?
On voit que le port 8080 est exposé sur la machine. Ce port est, en fait, le port 80 du container joomla. Et on voit aussi que joomla a une dépendance avec le container joomladb. Facile, non ?
Reproduisez-le vous-même
Pour la démo, ouvrez un shell Linux et lancez mkdir -p /tmp/compose-viz && cd $_ pour créer un dossier appelé compose-viz dans votre dossier temporaire Linux et y entrer.
Créez ensuite un nouveau fichier appelé compose.yaml avec ce contenu simplifié :
services: joomla: image: joomla ports: - 8080:80 depends_on: - joomladb
joomladb: image: postgres:16.0-alpineCe fichier Docker Compose définit deux services : un conteneur Joomla exposé sur le port 8080 et une base de données PostgreSQL. Le service Joomla dépend du service joomladb, ce qui signifie que Docker créera et démarrera la base de données avant le CMS.
Laissez la magie opérer et lancez docker run --rm -it -u $(id -u):$(id -g) -v $(pwd):/in wst24365888/compose-viz compose.yaml — vous obtiendrez l'image montrée plus haut.
Le flag --format
En ajoutant --format svg, vous obtiendrez un SVG au lieu d'un PNG. La liste des formats de sortie supportés est énorme : png|dot|jpeg|json|svg|bmp|canon|cmap|cmapx|cmapx_np|dot_json|emf|emfplus|eps|fig|gif|gv|imap|imap_np|ismap|jpe|jpg|json0|metafile|mp|pdf|pic|plain|plain-ext|pov|ps|ps2|tif|tiff|tk|vml|xdot|xdot1.2|xdot1.4|xdot_json.
Un exemple plus complexe
Remplacez le contenu du compose.yaml par celui-ci :
services:
redis: image: redis:alpine ports: - "6379" networks: - frontend deploy: replicas: 2 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure
db: image: postgres:9.4 volumes: - db-data:/var/lib/postgresql/data networks: - backend deploy: placement: constraints: [ node.role == manager ] vote: image: dockersamples/examplevotingapp_vote:before ports: - 5000:80 networks: - frontend depends_on: - redis deploy: replicas: 2 update_config: parallelism: 2 restart_policy: condition: on-failure result: image: dockersamples/examplevotingapp_result:before ports: - 5001:80 networks: - backend depends_on: - db deploy: replicas: 1 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure
worker: image: dockersamples/examplevotingapp_worker networks: - frontend - backend deploy: mode: replicated replicas: 1 labels: [ APP=VOTING ] restart_policy: condition: on-failure delay: 10s max_attempts: 3 window: 120s placement: constraints: [ node.role == manager ]
visualizer: image: dockersamples/visualizer ports: - "8080:8080" stop_grace_period: 1m30s volumes: - /var/run/docker.sock:/var/run/docker.sock deploy: placement: constraints: [ node.role == manager ]
networks: frontend: backend:
volumes: db-data:Ce fichier Docker Compose définit une application de vote distribuée avec plusieurs services : redis pour la mise en cache, une base de données postgres, une interface de vote, un service de résultats, un worker pour traiter les votes, et un visualiseur. Chaque service est configuré avec ses propres paramètres de déploiement, réseaux et contraintes pour fonctionner dans un cluster Docker Swarm.
Et l'image ci-dessous sera générée par l'outil :

Ici, on peut voir :
- Nous avons quatre ports exposés :
5001,5000,6379et8080. - Le port
8080est lié à un service webvisualizer; ce service utilise un volume pointant vers/var/run/docker.sock - Les ports
5000et5001renvoient à des services appelésvoteetresult. Comme le port interne est le port80, on sait que ces ports sont des interfaces web. - Le service
vote(port5000) utilise un serviceredis, accessible via le port6379. - Le service
result(port5001) est lié à un service Postgres appelédbet dispose de données persistantes (puisqu'on a un volume Docker appelédb-data). - Et ainsi de suite.
Un tel outil de visualisation simplifie énormément la compréhension d'une architecture Docker.
compose-viz vous donne un seul rendu, figé. Si vous voulez contrôler exactement ce que le diagramme affiche, Documentation as Code - Transformez votre infrastructure en diagrammes soignés avec Python et Mermaid analyse le même compose.yaml avec un script Python qui vous appartient, et Docker - Des diagrammes en tant que code liste une dizaine d'autres outils de diagram-as-code.
Docker config
Si, comme moi, vous utilisez beaucoup de fichiers .yml quand vous lancez Docker et/ou que vous y utilisez des variables d'environnement, lancez simplement docker compose config pour demander à Docker de rendre (à l'écran uniquement) ce qu'il appelle Parse, resolve and render compose file in canonical format, c'est-à-dire qu'il va fusionner tous vos .yml en une seule chaîne et résoudre les variables.
Copiez/collez la sortie à l'écran dans un fichier temporaire et utilisez cet outil sur ce fichier.
Cet article fait partie de la série Diagrammes as code :
- Docker - Des diagrammes en tant que code
- Créer une mind map avec Docker et Markdown
- Afficher un fichier JSON sous forme de mind map
- Comment générer un graphe depuis compose.yaml
- Drawdb-app - Rendez votre modèle de base de données en png, markdown, mermaid, ...
- Python - Générer des flux avec pydot
- Obtenir une mindmap plus attrayante avec Markmap et Quarto
- Documentation as Code - Transformez votre infrastructure en diagrammes soignés avec Python et Mermaid





