Tutorial

Comment installer et utiliser Docker Compose sur Ubuntu 20.04

UbuntuDockerUbuntu 20.04

Introduction

Docker simplifie le processus de gestion des processus de demande dans les conteneurs. Si les conteneurs ressemblent à des machines virtuelles à certains égards, ils sont plus légers et plus respectueux des ressources. Cela permet aux développeurs de décomposer un environnement d'applications en plusieurs services isolés.

Pour les applications qui dépendent de plusieurs services, orchestrer tous les conteneurs pour qu'ils démarrent, communiquent et s'arrêtent ensemble peut rapidement devenir compliqué. Docker Compose est un outil qui vous permet d'exécuter des environnements d'application multi-conteneurs basés sur des définitions contenues dans un fichier YAML. Il utilise les définitions de services pour construire des environnements entièrement personnalisables avec plusieurs conteneurs qui peuvent échanger des réseaux et des volumes de données.

Dans ce guide, nous vous montrerons comment installer Docker Compose sur un serveur Ubuntu 20.04 et comment commencer à utiliser cet outil.

Conditions préalables

Pour suivre cet article, vous aurez besoin de :

Étape 1 - Installation de Docker Compose

Pour être sûrs d'avoir la version stable la plus récente de Docker Compose, nous téléchargerons ce logiciel à partir de son dépôt officiel Github.

Tout d'abord, confirmez la dernière version disponible dans leur page des versions. Au moment de la rédaction du présent document, la version stable la plus récente est 1.26.0. 

La commande suivante permet de télécharger la version 1.26.0 et d'enregistrer le fichier exécutable à /usr/local/bin/docker-compose qui rendra ce logiciel accessible dans le monde entier sous la forme d'un docker-compose:

  • sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Ensuite, définissez les autorisations correctes de sorte que le docker-compose soit exécutable : 

  • sudo chmod +x /usr/local/bin/docker-compose

Pour vérifier que l'installation a réussi, vous pouvez lancer :

  • docker-compose --version

Vous verrez une sortie semblable à celle-ci :

Output
docker-compose version 1.26.0, build 8a1c60f6

Docker Compose est maintenant installé avec succès sur votre système. Dans la section suivante, nous verrons comment mettre en place un fichier docker-compose.yml et faire fonctionner un environnement conteneurisé avec cet outil.

Étape 2 — Configurer un fichier docker-compose.yml​​​

Pour démontrer comment mettre en place un docker-compose.yml et travailler avec Docker Compose, nous allons créer un environnement de serveur web en utilisant le fichier officiel Image Nginx du Docker Hub, le répertoire public du Docker. Cet environnement conteneurisé servira un seul fichier HTML statique.

Commencez par créer un nouveau répertoire dans votre dossier personnel, puis déplacez-vous dans celui-ci :

  • mkdir ~/compose-demo
  • cd ~/compose-demo

Dans ce répertoire, configurez un dossier d'application qui servira de root de document pour votre environnement Nginx :

  • mkdir app

En utilisant votre éditeur de texte préféré, créez un nouveau fichier index.html dans le dossier app :

  • nano app/index.html

Placez le contenu suivant dans ce fichier :

~/compose-demo/app/index.html
<!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 fini de le modifier. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL+X, puis Y et ENTER pour confirmer.

Ensuite, créez le fichier docker-compose.yml :

  • nano docker-compose.yml

Insérez le contenu suivant sur votre fichier docker-compose.yml : 

docker-compose.yml
version: '3.7'
services:
  web:
    image: nginx:alpine
    ports:
      - "8000:80"
    volumes:
      - ./app:/usr/share/nginx/html

Le fichier docker-compose.yml commence généralement par la définition de la version. Cela indiquera à Docker Compose quelle version de configuration nous utilisons.

Nous avons ensuite le bloc des services où nous mettons en place les services qui font partie de cet environnement. Dans notre cas, nous avons un service unique appelé web. Ce service utilise le protocole nginx:alpine et met en place une redirection de port avec la directive des ports. Toutes les demandes sur le port 8000 de la machine hôte (le système à partir duquel vous exécutez Docker Compose) seront redirigées vers le conteneur web sur le port 80, où Nginx tournera.

La directive sur les volumes créera un volume partagé entre la machine hôte et le conteneur. Cela permettra de partager le dossier app local avec le conteneur, et le volume sera situé dans /usr/share/nginx/html, à l'intérieur du conteneur, qui écrasera alors le root du document par défaut pour Nginx.

Enregistrez et fermez le fichier.

Nous avons mis en place une page de démonstration et un fichier docker-compose.yml pour créer un environnement de serveur web conteneurisé qui le servira. Dans la prochaine étape, nous allons mettre en place cet environnement avec Docker Compose. 

Etape 3 - Exécuter Docker Compose

Avec le fichier docker-compose.yml en place, nous pouvons maintenant exécuter Docker Compose pour amener notre environnement.  La commande suivante permet de télécharger les images nécessaires du Docker, de créer un conteneur pour le web et de faire fonctionner l'environnement conteneurisé en mode arrière-plan : 

  • docker-compose up -d

Docker Compose cherchera d'abord l'image définie sur votre système local, et s'il ne peut pas la localiser, il téléchargera l'image à partir de Docker Hub. Vous verrez une sortie de ce type :

Output
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 ... done

Votre environnement est maintenant en place et fonctionne en arrière-plan. Pour vérifier que le conteneur est actif, vous pouvez exécuter :

  • docker-compose ps

Cette commande vous montrera des informations sur les conteneurs en cours de route et leur état, ainsi que les éventuelles redirections de port actuellement en place :

Output
Name Command State Ports ---------------------------------------------------------------------------------- compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp

Vous pouvez maintenant accéder à l'application de démonstration en pointant votre navigateur sur localhost:8000 si vous exécutez cette démo sur votre machine locale, ou your_server_domain_or_IP:8000 si vous exécutez cette démo sur un serveur distant. 

Vous verrez une page comme celle-ci :

Page de démo de Docker Compose 

Parce que le volume partagé que vous avez mis en place dans le fichier docker-compose.yml permet de synchroniser les fichiers de votre dossier d’application avec le root du document du conteneur.  Si vous apportez des modifications au fichier index.html, elles seront automatiquement récupérées par le conteneur et donc reflétées sur votre navigateur lorsque vous rechargerez la page. 

Dans la prochaine étape, vous verrez comment gérer votre environnement conteneurisé avec les commandes Docker Compose.

Étape 4 - Se familiariser avec les commandes de Docker Compose

Vous avez vu comment mettre en place un fichier docker-compose.yml et amener votre environnement avec docker-compose. Vous allez maintenant voir comment utiliser les commandes de Docker Compose pour gérer et interagir avec votre environnement conteneurisé.

Pour vérifier les logs produits par votre conteneur Nginx, vous pouvez utiliser la commande logs :

  • docker-compose logs

Vous verrez une sortie semblable à celle-ci :

Output
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 souhaitez interrompre l'exécution de l'environnement sans modifier l'état actuel de vos conteneurs, vous pouvez utiliser :

  • docker-compose pause
Output
Pausing compose-demo_web_1 ... done

Pour reprendre l'exécution après une pause :

  • docker-compose unpause
Output
Unpausing compose-demo_web_1 ... done

La commande stop mettra fin à l'exécution du conteneur, mais elle ne détruira aucune donnée associée à vos conteneurs :

  • docker-compose stop
Output
Stopping compose-demo_web_1 ... done

Si vous voulez retirer les conteneurs, les réseaux et les volumes associés à cet environnement conteneurisé, utilisez la commande down : 

  • docker-compose down
Output
Removing compose-demo_web_1 ... done Removing network compose-demo_default

Notez que cela ne supprimera pas l'image de base utilisée par Docker Compose pour faire tourner votre environnement (dans notre cas, nginx:alpine). Ainsi, chaque fois que vous amenez votre environnement avec un docker-compose, le processus sera beaucoup plus rapide puisque l'image est déjà sur votre système. 

Si vous souhaitez également supprimer l'image de base de votre système, vous pouvez utiliser :

  • docker image rm nginx:alpine
Output
Untagged: nginx:alpine Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912 Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270 Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1 Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157 Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6 Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08 Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a

Note : 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 de Docker.

Conclusion

Dans ce guide, nous avons vu comment installer Docker Compose et mettre en place un environnement conteneurisé basé sur une image de serveur web Nginx. Nous avons également vu comment gérer cet environnement à l'aide des commandes Compose.

Pour une référence complète de toutes les commandes docker-compose, consultez la documentation officielle. 

0 Comments

Creative Commons License