Docker run vers Compose
Transformez une commande docker run en fichier docker-compose.yml prêt à l'emploi.
Chargement de Docker run vers Compose… Si rien ne se passe, activez JavaScript.
La plupart des projets commencent par une ligne docker run copiée d'un README et finissent en un mur d'options que personne n'a envie de retaper. Collez cette commande ici et l'outil la réécrit en fichier docker-compose.yml, en associant chaque option reconnue à la clé Compose correspondante : -p devient ports, -v devient volumes, -e devient environment, --restart devient restart, et ainsi de suite pour environ soixante-dix options, y compris les contrôles de santé, les limites de ressources, les pilotes de journalisation, les capacités, les ulimits et les réservations de GPU.
Questions fréquentes
Ma commande docker run est-elle envoyée à un serveur ?
Quelles options de docker run sont prises en charge ?
Pourquoi -d n'apparaît-il pas dans le fichier généré ?
Ai-je besoin de la clé version en haut du fichier ?
Que deviennent les volumes et les réseaux nommés ?
Puis-je convertir plusieurs conteneurs à la fois ?
Pourquoi les correspondances de ports sont-elles entre guillemets ?
L'outil comprend-il --mount et les contrôles de santé ?
Comment exécuter le fichier une fois généré ?
À propos de Docker run vers Compose
Le convertisseur lit la commande comme le ferait un interpréteur de commandes. Les continuations de ligne par barre oblique inverse, les guillemets simples et doubles, les options courtes avec la valeur accolée comme -p8080:80, les options groupées comme -itd et la forme --option=valeur sont toutes prises en charge, vous pouvez donc coller une commande telle quelle depuis la documentation, sans la nettoyer au préalable. Collez plusieurs commandes, une par ligne ou reliées par &&, et chacune devient un service du même fichier. Les volumes et les réseaux nommés utilisés par ces services sont regroupés et déclarés dans les sections volumes et networks de premier niveau, et les ports sont mis entre guillemets pour qu'une valeur comme 22:22 ne soit pas lue comme un nombre sexagésimal par l'analyseur YAML.
Les options qui n'ont de sens qu'au lancement d'un conteneur n'ont pas leur place dans un fichier Compose, et l'outil vous le dit au lieu de les supprimer en silence : -d est remplacé par docker compose up -d, --rm par docker compose down, et des options comme --cidfile ou --detach-keys apparaissent dans les Notes avec une explication courte. Tout s'exécute dans votre navigateur, sans appel serveur ni bibliothèque externe, si bien que les commandes contenant des mots de passe, des noms de registres privés ou des noms d'images internes ne quittent jamais la page. Copiez le résultat ou téléchargez-le sous le nom docker-compose.yml, puis lancez docker compose up -d dans le même dossier.
Compose s'appelait Fig à ses débuts
Avant Docker Compose, il y a eu Fig, un petit outil en Python publié en 2013 par Orchard Laboratories. Fig a introduit l'idée qu'une application à plusieurs conteneurs devait être décrite dans un seul fichier YAML et démarrée par une seule commande, à une époque où l'usage était un script shell rempli de lignes docker run. Docker a racheté Orchard en 2014 et Fig est devenu docker-compose l'année suivante, en conservant un format de fichier presque inchangé.
Le format a ensuite connu une décennie de remaniements. La version 1 n'avait même pas de clés de premier niveau, la version 2 a ajouté services, volumes et networks, et la version 3 a été façonnée par Docker Swarm, ce qui explique que des clés comme deploy apparaissent encore dans des fichiers qui ne verront jamais un swarm. La numérotation s'est arrêtée avec la Compose Specification, qui a fusionné les branches 2 et 3 et rendu le champ version obsolète.
La réécriture de Python vers Go dans Compose V2 a aussi changé la façon de l'appeler : docker-compose avec un trait d'union est devenu docker compose, une sous-commande de la CLI Docker. L'ancien binaire autonome a atteint sa fin de vie en juillet 2023, donc si un tutoriel vous demande encore d'ajouter version: '3.8' en haut du fichier, il a été écrit pour un outil que Docker ne distribue plus.