Aller au contenu principal

Docker - Des diagrammes en tant que code

Générez de superbes diagrammes d'infrastructure et d'application directement depuis du code Python, avec la librairie diagrams et une simple commande Docker. Visualisez vos systèmes complexes sans effort.

· 6 minutes de lecture
Voir la source
Christophe
Amoureux de Markdown, WSL et Docker ~ Curieux insatiable.
Cet article existe aussi en anglais — lire la version originale.

Traduction automatique

Cette traduction a été produite par une IA. Elle peut contenir des contresens ou des maladresses, en particulier sur les termes techniques. En cas de doute, consultez l'article de référence en anglais — c'est lui qui fait foi.

Cet article a plus d'un an, mais il a été relu le 30 juillet 2026 — son contenu est toujours exact.

Docker - Des diagrammes en tant que code

⚡
TL;DR

Cet article montre comment générer des diagrammes-as-code avec la librairie Python diagrams via une image Docker prête à l'emploi (gtramontina/diagrams) : on envoie un fichier .py dans docker run pour produire des diagrammes d'architecture (icônes AWS/Azure/GCP, par exemple) sans rien installer localement. Il se termine par un large tour d'horizon des autres outils de diagram-as-code : Mermaid, PlantUML, Graphviz, Kroki, DBML-renderer, Structurizr, et d'autres encore.

Quel plaisir de pouvoir dessiner des diagrammes en écrivant simplement du texte. Certains outils sont plus connus que d'autres, par exemple Mermaid — que j'ai depuis automatisé dans Documentation as Code - Transformez votre infrastructure en diagrammes soignés avec Python et Mermaid, et dont le cousin Graphviz est traité dans Python - Générer des flux avec pydot.

Connaissiez-vous https://diagrams.mingrammer.com/ ? Explorons-le avec, bien entendu, une image Docker prête à l'emploi.

Le résultat​

Voici un diagramme produit par cet article, et il n'y avait que du texte en entrée :

Team

La commande qui l'a produit tient sur une ligne ; le fichier .py est envoyé dans un container et le .png atterrit dans votre dossier courant :

>user@machine: ~/yourproject

Pourquoi ça fonctionne​

  • Le fichier .py n'est pas exécuté sur votre machine : il est envoyé dans le container, qui contient Python, la librairie diagrams, Graphviz et l'ensemble des jeux d'icônes AWS/Azure/GCP/K8S.
  • -v $(pwd):/out est ce qui permet à l'image générée de revenir dans votre dossier au lieu de mourir avec le container.
  • -u 1000:1000 exécute le container avec votre identité, de sorte que le fichier produit appartienne à votre utilisateur et pas à root.

Notation Windows

Si vous travaillez sous Windows, remplacez $(pwd) par %CD%. Et remplacez cat par type.

Le code source​

Comme toujours pour la démo, ouvrez un shell Linux et lancez mkdir -p /tmp/docker-diagrams && cd $_ pour créer un dossier docker-diagrams dans votre dossier temporaire Linux et vous y rendre.

Créez ensuite un nouveau fichier team.py avec le contenu qui a produit le diagramme ci-dessus :

from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB
with Diagram("My Team", show=False, direction="TB"):
(
ELB("Olivier")
>> [EC2("Christophe"), EC2("Jason"), EC2("Niki"), EC2("Rudy"), EC2("Stijn")]
>> RDS("Work together")
)

Ce script utilise la bibliothèque diagrams pour générer visuellement une architecture AWS représentant une équipe. Il crée un diagramme montrant un load balancer nommé Olivier dirigeant le trafic vers cinq instances EC2 (les membres de l'équipe), lesquelles se connectent à une base de données RDS partagée appelée Work together, le tout sans afficher le résultat à l'écran.

Puis lancez la commande de conversion montrée plus haut.

0.23.3 est la dernière version disponible au moment d'écrire ce document. Voir https://hub.docker.com/r/gtramontina/diagrams/tags pour récupérer la plus récente.

Facile, non ?

Une vraie architecture​

Vingt lignes de Python pour un organigramme d'équipe, c'est sympa ; voici le même exercice sur une infrastructure réelle :

from diagrams import Cluster, Diagram
from diagrams.k8s.compute import Pod, StatefulSet
from diagrams.k8s.network import Service
from diagrams.k8s.storage import PV, PVC, StorageClass
with Diagram("Stateful Architecture", show=False):
with Cluster("Apps"):
svc = Service("svc")
sts = StatefulSet("sts")
apps = []
for _ in range(3):
pod = Pod("pod")
pvc = PVC("pvc")
pod - sts - pvc
apps.append(svc >> pod >> pvc)
apps << PV("pv") << StorageClass("sc")

Ce script crée un diagramme d'architecture Kubernetes montrant une architecture stateful. Il définit un cluster contenant un service, un StatefulSet, et trois pods, chacun avec son propre PVC (Persistent Volume Claim), tous connectés à un PV (Persistent Volume) partagé géré par une StorageClass.

Et l'image obtenue :

Stateful Architecture

Dingue, non ? Et tout ça sans rien installer !

Plus d'exemples

Le code de l'image Docker est ici : https://github.com/gtramontina/docker-diagrams, et vous trouverez plein d'autres exemples sur https://github.com/mingrammer/diagrams.

Icônes et autres outils (référence, à garder sous le coude)​

Une énorme liste d'icônes/nœuds est disponible sur plusieurs pages à partir de https://diagrams.mingrammer.com/docs/nodes/onprem. Voir OnPrem, AWS, Azure, GCP, IBM, K8S et aussi comment créer les vôtres (à partir d'images .png locales) : Custom.

Et comme diagrams est loin d'être le seul outil texte-vers-image, voici la liste sur laquelle je reviens sans cesse :

Conclusion​

Des diagrammes d'architecture qui vivent dans votre repository, que vous pouvez differ et relire comme n'importe quel autre fichier, et qui n'exigent jamais Python ni Graphviz sur votre machine. La prochaine fois que l'infrastructure change, vous modifiez une ligne de texte au lieu de déplacer une boîte à la souris.

Si vous préférez rester sur une syntaxe que vous connaissez déjà, Documentation as Code - Transformez votre infrastructure en diagrammes soignés avec Python et Mermaid fait la même chose avec Mermaid.


Cet article vous a-t-il été utile ?
Avez-vous suivi les étapes de cet article ?