Qu'est-ce que Docker Compose ?
Explication
Si vous avez suivi les guides jusqu'à présent, vous avez travaillé avec des applications à conteneur unique. Mais maintenant, vous voulez faire quelque chose de plus compliqué - exécuter des bases de données, des files d'attente de messages, des caches ou une variété d'autres services. Installez-vous tout dans un seul conteneur ? Exécutez-vous plusieurs conteneurs ? Si vous en exécutez plusieurs, comment les connectez-vous tous ensemble ?
Une bonne pratique pour les conteneurs est que chaque conteneur doit faire une chose et la faire bien. Bien qu'il y ait des exceptions à cette règle, évitez la tendance à faire en sorte qu'un conteneur fasse plusieurs choses.
Vous pouvez utiliser plusieurs commandes docker run
pour démarrer plusieurs conteneurs. Mais vous vous rendrez vite compte que vous devrez gérer les réseaux, tous les indicateurs nécessaires pour connecter les conteneurs à ces réseaux, et plus encore. Et lorsque vous avez terminé, le nettoyage est un peu plus compliqué.
Avec Docker Compose, vous pouvez définir tous vos conteneurs et leurs configurations dans un seul fichier YAML. Si vous incluez ce fichier dans votre dépôt de code, toute personne qui clone votre dépôt peut être opérationnelle avec une seule commande.
Il est important de comprendre que Compose est un outil déclaratif - vous le définissez simplement et c'est parti. Vous n'avez pas toujours besoin de tout recréer à partir de zéro. Si vous apportez une modification, exécutez à nouveau docker compose up
et Compose réconciliera les modifications de votre fichier et les appliquera intelligemment.
Dockerfile versus fichier Compose
Un Dockerfile fournit des instructions pour construire une image de conteneur tandis qu'un fichier Compose définit vos conteneurs en cours d'exécution. Très souvent, un fichier Compose fait référence à un Dockerfile pour construire une image à utiliser pour un service particulier.
Essayez-le
Dans cette prise en main, vous apprendrez à utiliser Docker Compose pour exécuter une application multi-conteneurs. Vous utiliserez une simple application de liste de tâches construite avec Node.js et MySQL comme serveur de base de données.
Démarrer l'application
Suivez les instructions pour exécuter l'application de liste de tâches sur votre système.
-
Téléchargez et installez Docker Desktop.
-
Ouvrez un terminal et clonez cette application exemple.
git clone https://github.com/dockersamples/todo-list-app
-
Naviguez dans le répertoire
todo-list-app
:cd todo-list-app
À l'intérieur de ce répertoire, vous trouverez un fichier nommé
compose.yaml
. Ce fichier YAML est l'endroit où toute la magie opère ! Il définit tous les services qui composent votre application, ainsi que leurs configurations. Chaque service spécifie son image, ses ports, ses volumes, ses réseaux et tout autre paramètre nécessaire à son fonctionnement. Prenez le temps d'explorer le fichier YAML et de vous familiariser avec sa structure. -
Utilisez la commande
docker compose up
pour démarrer l'application :docker compose up -d --build
Lorsque vous exécutez cette commande, vous devriez voir une sortie comme celle-ci :
[+] Running 5/5 ✔ app 3 layers [⣿⣿⣿] 0B/0B Pulled 7.1s ✔ e6f4e57cc59e Download complete 0.9s ✔ df998480d81d Download complete 1.0s ✔ 31e174fedd23 Download complete 2.5s ✔ 43c47a581c29 Download complete 2.0s [+] Running 4/4 ⠸ Network todo-list-app_default Created 0.3s ⠸ Volume "todo-list-app_todo-mysql-data" Created 0.3s ✔ Container todo-list-app-app-1 Started 0.3s ✔ Container todo-list-app-mysql-1 Started 0.3s
Beaucoup de choses se sont passées ici ! Quelques points à souligner :
- Deux images de conteneur ont été téléchargées depuis Docker Hub - node et MySQL
- Un réseau a été créé pour votre application
- Un volume a été créé pour conserver les fichiers de la base de données entre les redémarrages des conteneurs
- Deux conteneurs ont été démarrés avec toute leur configuration nécessaire
Si cela vous semble écrasant, ne vous inquiétez pas ! Vous y arriverez !
-
Avec tout maintenant en place et en cours d'exécution, vous pouvez ouvrir http://localhost:3000 dans votre navigateur pour voir le site. N'hésitez pas à ajouter des éléments à la liste, à les cocher et à les supprimer.
-
Si vous regardez l'interface graphique de Docker Desktop, vous pouvez voir les conteneurs et approfondir leur configuration.
Tout démonter
Comme cette application a été démarrée à l'aide de Docker Compose, il est facile de tout démonter lorsque vous avez terminé.
-
Dans la CLI, utilisez la commande
docker compose down
pour tout supprimer :docker compose down
Vous verrez une sortie similaire à la suivante :
[+] Running 3/3 ✔ Container todo-list-app-mysql-1 Removed 2.9s ✔ Container todo-list-app-app-1 Removed 0.1s ✔ Network todo-list-app_default Removed 0.1s
Persistance des volumes
Par défaut, les volumes ne sont pas automatiquement supprimés lorsque vous démontez une pile Compose. L'idée est que vous pourriez vouloir récupérer les données si vous redémarrez la pile.
Si vous souhaitez supprimer les volumes, ajoutez l'indicateur
--volumes
lors de l'exécution de la commandedocker compose down
:docker compose down --volumes [+] Running 1/0 ✔ Volume todo-list-app_todo-mysql-data Removed
-
Alternativement, vous pouvez utiliser l'interface graphique de Docker Desktop pour supprimer les conteneurs en sélectionnant la pile d'applications et en sélectionnant le bouton Supprimer.
Utilisation de l'interface graphique pour les piles Compose
Notez que si vous supprimez les conteneurs d'une application Compose dans l'interface graphique, vous ne supprimez que les conteneurs. Vous devrez supprimer manuellement le réseau et les volumes si vous souhaitez le faire.
Dans cette présentation, vous avez appris à utiliser Docker Compose pour démarrer et arrêter une application multi-conteneurs.
Ressources supplémentaires
Cette page était une brève introduction à Compose. Dans les ressources suivantes, vous pouvez approfondir Compose et comment écrire des fichiers Compose.