Comment installer Docker Compose sur Ubuntu 16.04

introduction

Docker est un excellent outil pour automatiser le déploiement d'applications Linux à l'intérieur de conteneurs logiciels, mais pour tirer pleinement parti de son potentiel, chaque composant d'une application doit s'exécuter dans son propre conteneur individuel. Orchestrer tous les conteneurs pour qu'ils démarrent, communiquent et s'arrêtent ensemble peut rapidement devenir fastidieux pour les applications complexes comportant de nombreux composants.

La communauté Docker a proposé une solution populaire appeléeFig, qui vous permettait d'utiliser un seul fichier YAML pour orchestrer tous vos conteneurs et configurations Docker. Cela est devenu si populaire que l'équipe Docker a décidé de créer desDocker Compose basés sur la source Fig, qui est maintenant obsolète. Docker Compose permet aux utilisateurs d'orchestrer plus facilement les processus des conteneurs Docker, notamment le démarrage, l'arrêt et la configuration des liaisons et des volumes intra-conteneur.

Dans ce didacticiel, nous allons vous montrer comment installer la dernière version de Docker Compose pour vous aider à gérer des applications multi-conteneurs.

Conditions préalables

Pour suivre cet article, vous aurez besoin d’un serveur Ubuntu 16.04 avec les éléments suivants:

Une fois que ceux-ci sont en place, vous êtes prêt à les suivre.

[.note] #Note: Même si les prérequis donnent des instructions pour installer Docker sur Ubuntu 16.04, les commandesdocker de cet article devraient fonctionner sur d'autres systèmes d'exploitation tant que Docker est installé.
#

[[step-1 -—- Installing-docker-compose]] == Étape 1 - Installation de Docker Compose

Bien que nous puissions installer Docker Compose à partir des référentiels officiels Ubuntu, il s’agit de plusieurs versions mineures derrière la dernière version. Nous allons donc installer Docker Compose à partir du référentiel GockHub de Docker. La commande ci-dessous est légèrement différente de celle que vous trouverez sur la pageReleases. En utilisant l'indicateur-o pour spécifier d'abord le fichier de sortie plutôt que de rediriger la sortie, cette syntaxe évite de se heurter à une erreur de refus d'autorisation provoquée lors de l'utilisation desudo.

Nous allons vérifier lescurrent release et si nécessaire, les mettre à jour dans la commande ci-dessous:

sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

Ensuite, nous allons définir les autorisations:

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

Ensuite, nous vérifierons que l’installation a réussi en vérifiant la version:

docker-compose --version

Ceci imprimera la version que nous avons installée:

Outputdocker-compose version 1.18.0, build 8dd22a9

Maintenant que Docker Compose est installé, nous sommes prêts à exécuter un exemple «Hello World».

[[step-2 -—- running-a-container-with-docker-compose]] == Étape 2 - Exécution d'un conteneur avec Docker Compose

Le registre Docker public, Docker Hub, comprend une imageHello World pour la démonstration et les tests. Il illustre la configuration minimale requise pour exécuter un conteneur à l'aide de Docker Compose: un fichier YAML qui appelle une seule image:

Tout d’abord, nous allons créer un répertoire pour le fichier YAML et y aller:

mkdir hello-world
cd hello-world

Ensuite, nous allons créer le fichier YAML:

nano docker-compose.yml

Placez le contenu suivant dans le fichier, enregistrez le fichier et quittez l'éditeur de texte:

docker-compose.yml

my-test:
 image: hello-world

La première ligne du fichier YAML est utilisée dans le nom du conteneur. La deuxième ligne spécifie quelle image utiliser pour créer le conteneur. Lorsque nous exécutons la commandedocker-compose up, il recherchera une image locale du nom que nous avons spécifié,hello-world. Avec cela en place, nous allons enregistrer et quitter le fichier.

Nous pouvons regarder manuellement les images sur notre système avec la commandedocker images:

docker images

Lorsqu'il n'y a aucune image locale, seuls les en-têtes de colonne affichent:

OutputREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

Maintenant, tout en restant dans le répertoire~/hello-world, nous allons exécuter la commande suivante:

docker-compose up

La première fois que nous exécutons la commande, s'il n'y a pas d'image locale nomméehello-world, Docker Compose la récupérera du référentiel public Docker Hub:

OutputPulling my-test (hello-world:latest)...
latest: Pulling from library/hello-world
c04b14da8d14: Downloading [==================================================>] c04b14da8d14: Extracting [==================================================>]  c04b14da8d14: Extracting [==================================================>]  c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest
. . .

Après avoir extrait l'image,docker-compose crée un conteneur, attache et exécute le programmehello, qui à son tour confirme que l'installation semble fonctionner:

Output. . .
Creating helloworld_my-test_1...
Attaching to helloworld_my-test_1
my-test_1 |
my-test_1 | Hello from Docker.
my-test_1 | This message shows that your installation appears to be working correctly.
my-test_1 |
. . .

Ensuite, il affiche une explication de ce qu’il a fait:

Output of docker-compose up1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

Les conteneurs Docker ne s'exécutent que tant que la commande est active, donc une fois quehello a fini de s'exécuter, le conteneur s'est arrêté. Par conséquent, lorsque nous examinons les processus actifs, les en-têtes de colonne s'affichent, mais le conteneurhello-world ne sera pas répertorié car il n'est pas en cours d'exécution.

docker ps
OutputCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES

Nous pouvons voir les informations sur le conteneur, dont nous aurons besoin à l'étape suivante, en utilisant l'indicateur-a qui affiche tous les conteneurs, pas seulement ceux actifs:

docker ps -a
OutputCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
06069fd5ca23        hello-world         "/hello"            35 minutes ago      Exited (0) 35 minutes ago                       drunk_payne

Ceci affiche les informations dont nous aurons besoin pour supprimer le conteneur lorsque nous en aurons terminé.

[[step-3 -—- remove-the-image-optional]] == Étape 3 - Suppression de l'image (facultatif)

Pour éviter d’utiliser trop d’espace disque, nous allons supprimer l’image locale. Pour ce faire, nous devons supprimer tous les conteneurs qui font référence à l'image à l'aide de la commandedocker rm, suivie de l'ID DU CONTAINER ou du NOM. Ci-dessous, nous utilisons le CONTAINER ID de la commandedocker ps -a que nous venons d'exécuter. Assurez-vous de remplacer l'ID de votre conteneur:

docker rm 06069fd5ca23

Une fois que tous les conteneurs qui référencent l'image ont été supprimés, nous pouvons supprimer l'image:

docker rmi hello-world

Conclusion

Nous avons maintenant installé Docker Compose, testé notre installation en exécutant un exemple Hello World et supprimé l’image de test et le conteneur.

Alors que l'exemple de Hello World a confirmé notre installation, la configuration simple ne montre pas l'un des principaux avantages de Docker Compose - être capable de monter et descendre un groupe de conteneurs Docker en même temps. Pour voir la puissance de Docker Compose en action, vous pouvez consulter cet exemple pratique,How To Configure a Continuous Integration Testing Environment with Docker and Docker Compose on Ubuntu 16.04