Comment installer et utiliser Docker Compose sur Ubuntu 20.04
Vous n'utilisez pas Ubuntu 20.04 ?Choisissez une autre version ou distribution.
Introduction
Docker simplifie le processus de gestion des processus d'application dans des conteneurs. Bien que les conteneurs soient similaires aux machines virtuelles à certains égards, ils sont plus légers et plus économes en ressources. Cela permet aux développeurs de décomposer un environnement d'application en plusieurs services isolés.
Pour les applications dépendant de plusieurs services, orchestrer le démarrage, la communication et l'arrêt de tous les conteneurs peut rapidement devenir difficile à gérer. Docker Compose est un outil qui vous permet d'exécuter des environnements d'applications multi-conteneurs basés sur des définitions définies dans un fichier YAML. Il utilise des définitions de services pour construire des environnements entièrement personnalisables avec plusieurs conteneurs pouvant partager des réseaux et des volumes de données.
Dans ce guide, vous allez démontrer comment installer Docker Compose sur un serveur Ubuntu 20.04 et comment commencer à utiliser cet outil.
Simplifiez le déploiement des applications sur les serveurs avec la plateforme d'applications Linux-Console.net. Déployez directement depuis GitHub en quelques minutes.
Prérequis
Pour suivre cet article, vous aurez besoin :
- Accès à une machine locale Ubuntu 20.04 ou à un serveur de développement en tant qu'utilisateur non root avec des privilèges sudo. Si vous utilisez un serveur distant, il est conseillé d'avoir un pare-feu actif installé. Pour les configurer, veuillez vous référer à notre Guide de configuration initiale du serveur pour Ubuntu 20.04.
- Docker installé sur votre serveur ou machine locale, en suivant les étapes 1 et 2 de Comment installer et utiliser Docker sur Ubuntu 20.04.
Remarque : Ce tutoriel vous guidera à travers l'installation de Docker Compose v1, qui utilise docker-compose. À partir de Docker Compose v2, Docker a migré vers l'utilisation du plugin CLI compose comme documenté dans notre dernière version de ce tutoriel pour Ubuntu 22.04, et s'éloigne de l'original docker-compose. Bien que l'installation diffère, en général, l'utilisation réelle consiste à supprimer le trait d'union des appels docker-compose pour devenir docker compose. Pour les détails complets sur la compatibilité, consultez la documentation officielle de Docker sur la compatibilité des commandes entre le nouveau compose et l'ancien docker-compose.
Étape 1 — Installer Docker Compose
Pour vous assurer d'obtenir la version stable la plus récente de Docker Compose, vous téléchargerez ce logiciel depuis son dépôt officiel sur Github.
Tout d'abord, confirmez la dernière version disponible sur leur page de téléchargements. Au moment de la rédaction de ce document, la version stable la plus récente est 1.29.2.
La commande suivante téléchargera la version 1.29.2 et enregistrera le fichier exécutable à /usr/local/bin/docker-compose, ce qui rendra ce logiciel accessible globalement en tant que docker-compose :
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composeEnsuite, définissez les permissions correctes afin que la commande docker-compose soit exécutable :
sudo chmod +x /usr/local/bin/docker-composePour vérifier que l'installation a réussi, vous pouvez exécuter :
docker-compose --versionVous verrez une sortie similaire à ceci :
docker-compose version 1.29.2, build 5becea4cDocker Compose est maintenant installé avec succès sur votre système. Dans la section suivante, vous verrez comment configurer un fichier docker-compose.yml et mettre en place un environnement conteneurisé en fonctionnement avec cet outil.
Étape 2 — Configuration d'un fichier docker-compose.yml
Pour démontrer comment configurer un fichier docker-compose.yml et travailler avec Docker Compose, vous allez créer un environnement de serveur web en utilisant l'image officielle Nginx de Docker Hub, le registre public Docker. Cet environnement conteneurisé servira un seul fichier HTML statique.
Commencez par créer un nouveau répertoire dans votre dossier personnel, puis entrez-y :
mkdir ~/compose-demo
cd ~/compose-demoDans ce répertoire, créez un dossier pour l'application qui servira de racine des documents pour votre environnement Nginx :
mkdir appEn utilisant votre éditeur de texte préféré, créez un nouveau fichier index.html dans le dossier app :
nano app/index.htmlPlacez le contenu suivant dans ce fichier :
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Docker Compose Demo</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>
<h1>This is a Docker Compose Demo Page.</h1>
<p>This content is being served by an Nginx container.</p>
</body>
</html>Enregistrez et fermez le fichier lorsque vous avez terminé. Si vous utilisez nano, vous pouvez le faire en tapant CTRL+X, puis Y et ENTRÉE pour confirmer.
Ensuite, créez le fichier docker-compose.yml :
nano docker-compose.ymlInsérez le contenu suivant dans votre fichier docker-compose.yml :
version: '3.7'
services:
web:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./app:/usr/share/nginx/htmlLe fichier docker-compose.yml commence généralement par la définition version. Cela permettra à Docker Compose de savoir quelle version de configuration vous utilisez.
Vous avez ensuite le bloc services, où vous configurez les services qui font partie de cet environnement. Dans votre cas, vous avez un seul service appelé web. Ce service utilise l'image nginx:alpine et configure une redirection de port avec la directive ports. Toutes les requêtes sur le port 8000 de la machine hôte (le système depuis lequel vous exécutez Docker Compose) seront redirigées vers le conteneur web sur le port 80, où Nginx sera en cours d'exécution.
La directive volumes créera un volume partagé entre la machine hôte et le conteneur. Cela partagera le dossier local app avec le conteneur, et le volume sera situé à /usr/share/nginx/html à l'intérieur du conteneur, ce qui écrasera alors le répertoire racine par défaut pour Nginx.
Enregistrez et fermez le fichier.
Vous avez mis en place une page de démonstration et un fichier docker-compose.yml pour créer un environnement de serveur web conteneurisé qui la servira. Dans l'étape suivante, vous lancerez cet environnement avec Docker Compose.
Étape 3 — Exécution de Docker Compose
Avec le fichier docker-compose.yml en place, vous pouvez maintenant exécuter Docker Compose pour lancer votre environnement. La commande suivante téléchargera les images Docker nécessaires, créera un conteneur pour le service web et exécutera l'environnement conteneurisé en mode arrière-plan :
docker-compose up -dDocker Compose recherchera d'abord l'image définie sur votre système local, et s'il ne peut pas localiser l'image, il téléchargera l'image depuis Docker Hub. Vous verrez une sortie comme celle-ci :
Creating network "compose-demo_default" with the default driver
Pulling web (nginx:alpine)...
alpine: Pulling from library/nginx
cbdbe7a5bc2a: Pull complete
10c113fb0c77: Pull complete
9ba64393807b: Pull complete
c829a9c40ab2: Pull complete
61d685417b2f: Pull complete
Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502
Status: Downloaded newer image for nginx:alpine
Creating compose-demo_web_1 ... doneRemarque : Si vous rencontrez une erreur de permission concernant le socket Docker, cela signifie que vous avez sauté l'étape 2 de Comment installer et utiliser Docker sur Ubuntu 20.04. Revenir en arrière et compléter cette étape permettra d'activer les permissions pour exécuter les commandes docker sans sudo.
Votre environnement est maintenant opérationnel en arrière-plan. Pour vérifier que le conteneur est actif, vous pouvez exécuter :
docker-compose psCette commande vous montrera des informations sur les conteneurs en cours d'exécution et leur état, ainsi que sur toutes les redirections de ports actuellement en place :
Name Command State Ports
----------------------------------------------------------------------------------
compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcpVous pouvez maintenant accéder à l'application de démonstration en dirigeant votre navigateur vers localhost:8000 si vous exécutez cette démonstration sur votre machine locale, ou votre_domaine_ou_IP_du_serveur:8000 si vous exécutez cette démonstration sur un serveur distant.
Vous verrez une page comme celle-ci :
Le volume partagé que vous avez configuré dans le fichier docker-compose.yml maintient vos fichiers du dossier app synchronisés avec le répertoire racine du conteneur. Si vous apportez des modifications au fichier index.html, elles seront automatiquement prises en compte par le conteneur et donc reflétées dans votre navigateur lorsque vous rechargez la page.
Dans l'étape suivante, vous verrez comment gérer votre environnement conteneurisé avec les commandes Docker Compose.
Étape 4 — Se familiariser avec les commandes Docker Compose
Vous avez vu comment configurer un fichier docker-compose.yml et lancer votre environnement avec docker-compose up. Vous allez maintenant voir comment utiliser les commandes Docker Compose pour gérer et interagir avec votre environnement conteneurisé.
Pour vérifier les journaux produits par votre conteneur Nginx, vous pouvez utiliser la commande logs :
docker-compose logsVous verrez une sortie similaire à ceci :
Attaching to compose-demo_web_1
web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up
web_1 | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"Si vous voulez mettre en pause l'exécution de l'environnement sans changer l'état actuel de vos conteneurs, vous pouvez utiliser :
docker-compose pausePausing compose-demo_web_1 ... donePour reprendre l'exécution après avoir émis une pause :
docker-compose unpauseUnpausing compose-demo_web_1 ... doneLa commande stop terminera l'exécution du conteneur, mais elle ne détruira aucune donnée associée à vos conteneurs :
docker-compose stopStopping compose-demo_web_1 ... doneSi vous voulez supprimer les conteneurs, réseaux et volumes associés à cet environnement conteneurisé, utilisez la commande down :
docker-compose downRemoving compose-demo_web_1 ... done
Removing network compose-demo_defaultRemarquez que cela ne supprimera pas l'image de base utilisée par Docker Compose pour démarrer votre environnement (dans votre cas, nginx:alpine). De cette façon, chaque fois que vous relancerez votre environnement avec un docker-compose up, le processus sera beaucoup plus rapide puisque l'image est déjà sur votre système.
Au cas où vous voudriez également supprimer l'image de base de votre système, vous pouvez utiliser :
docker image rm nginx:alpineUntagged: nginx:alpine
Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912
Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270
Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1
Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157
Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6
Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08
Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741aRemarque : Veuillez vous référer à notre guide sur Comment installer et utiliser Docker pour une référence plus détaillée sur les commandes Docker.
Conclusion
Dans ce guide, vous avez vu comment installer Docker Compose et configurer un environnement conteneurisé basé sur une image de serveur web Nginx. Vous avez également vu comment gérer cet environnement en utilisant les commandes Compose.
Pour une référence complète de toutes les commandes disponibles de docker-compose, consultez la documentation officielle.
Si vous êtes intéressé par plus d'utilisations de Docker Compose, consultez Comment installer WordPress avec Docker Compose et aussi Comment sécuriser une application Node.js conteneurisée avec Nginx, Let's Encrypt et Docker Compose.

