10. Orchestrer ses conteneurs avec Docker Compose - Docker

Nous avons parcouru les bases de Docker, manipulé les conteneurs, nous en avons lancé et supprimé lorsque nous en avions besoin, tout cela en mode impératif. C'est-à-dire que tout ce que nous avons exécuté était en ligne de commande, spécifié par des arguments et des options complémentaires pour chacune des fonctionnalités.

Regardons maintenant comment utiliser Docker en mode déclaratif afin d'orchestrer ses conteneurs avec Docker Compose.

Présentation

Dans un contexte de production, vous imaginez bien que si une application est conteneurisée, elle ne sera pas exécutée avec des commandes docker run. Car comme dit plus haut, ces commandes sont en mode impératif, c'est-à-dire que vous décrivez votre besoin en une seule ligne de commande, qui est éphémère.

Docker Compose est quant à lui en mode déclaratif. C'est-à-dire que toute votre configuration se trouve dans un fichier YAML se nommant docker-compose.yml.

Docker Compose amène de nombreuses fonctionnalités et avantages, en voici quelques uns :

  • L'historisation et la documentation des conteneurs exécutés, dans un fichier YAML (cela évite d'exécuter des commandes docker run parfois très longues).
  • La gestion des dépendances entre conteneurs.
  • Le déploiement de plusieurs conteneurs dans un seul fichier de configuration.

Et bien d'autres ! Il faut aussi ajouter à tout cela que Docker Compose simplifie l'administration des conteneurs, avec notamment le cloisonnement de chaque projet contenant un docker-compose.yml dans un répertoire différent.

Définitions

Afin de visualiser à quoi peut ressembler un fichier docker-compose.yml, voici un exemple :

---
version: '3.3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
    container_name: nginx

Ce docker-compose.yml lance un conteneur nommé nginx à partir de l'image du même nom en exposant le port 80 du conteneur sur l'hôte.

  • version : Correspond à la version de Docker Compose utilisée. La valeur dépend des fonctionnalités disponibles.
  • services : Liste des conteneurs vus sous forme de services par Docker Compose. C'est un paradigme qui amène la construction d'une architecture différemment, sous forme de micro-services afin de découper son architecture en conteneurs séparément.
  • web : Nom de notre service.
  • image : Correspond à l'image Docker utilisée. Celle-ci sera pull si elle n'est pas disponible sur la machine locale.
  • ports : Liste permettant de déclarer les ports du conteneur à exposer sur la machine hôte.
  • container_name : Nom du conteneur (équivalent de l'argument --name de la commande docker run).

L'équivalent de ce Docker Compose en une commande docker run serait celle-ci :

docker run -d --name nginx -p 80:80 nginx

Maintenant que nous avons notre Docker Compose avec notre service déclaré, pour le lancer en mode détaché, il suffit d'exécuter la commande suivante en se plaçant dans le même répertoire que le fichier docker-compose.yml :

docker-compose up -d

Votre conteneur va se lancer en mode détaché.

Dans le cours suivant, nous verrons comment construire une image Docker et lancer un conteneur à partir de cette image dans un Docker Compose.