Ça y est ! On a décidé d’héberger nos services et de les déployer avec Docker.

Mais, on gère ça comment ? Tout à la main en notant sur un bloc-notes les lignes de commandes (potentiellement de trois pieds de long) nécessaires à lancer chaque conteneur ? Ou on utilise des solutions de déploiement complexes qu’utilisent beaucoup d’entreprises (mais vlà la galère pour se lancer là-dedans de zéro) ?

Visual Studio Code is an integrated development environment made by Microsoft for Windows, Linux, and macOS. Features include support for debugging, syntax highlighting, intelligent code completion, snippets, code refactoring, and embedded Git.
Photo by Mohammad Rahmani / Unsplash

Dans les alternatives entre ces deux extrêmes, on a Docker Compose. C’est une solution hyper intéressante qui se base sur des fichiers nommés docker-compose.yml et dans lequel on va écrire de façon très simple à prendre en main et à comprendre comment déployer un ou des conteneurs.

docker-compose.yml
-----------------------------

version: "3"
services:
  mail:
    container_name: mail
    image: bytemark/smtp
    restart: always
    networks:
      - backend
      - frontend

Dans cet exemple, le fichier va permettre de :

  • déployer un conteneur nommé mail
  • basé sur une image de serveur SMTP
  • qui redémarrera toujours au redémarrage du serveur
  • connecté à deux réseaux backend et frontend

On peut aller bien évidemment bien plus loin, rajouter de la redirection de port, attacher des volumes au conteneur, etc, si on en a besoin.

On s’évite des lignes de commande pouvant être très longues puisqu’elles sont alors stockées dans un fichier texte sur le serveur directement. Alors imaginez quand on doit déployer une application nécessitant plusieurs conteneurs (par exemple : 1 pour la base de données, 1 pour l’application web, 1 pour l’envoi de notification par email) !
Au lieu d’avoir une ligne de commande par conteneur, on écrit l’équivalent dans un seul fichier docker-compose.yml (donc plus de copier-coller à faire) et une seule ligne de commande simple à retenir pour tout déployer.

Mais, et pour les allergiques à la ligne de commande et aux fichiers textes ? C’est là que Portainer entre en jeu !

Portainer est une interface web créée pour gérer vos déploiements Docker, d’un simple conteneur à une stack complexe, sur un serveur seul ou sur un cluster Docker Swarm. Portainer propose beaucoup d’options, mais n’ayez pas peur, cela reste simple dans la plupart des cas.

Pour notre exemple, on va utiliser la fonction Stack de Portainer pour déployer notre conteneur de serveur SMTP.

Et, comme vous pouvez le remarquer sur l’image, ça s’utilise de la même façon que notre fichier docker-compose.yml de tout à l’heure ! On renseigne le nom de notre stack, le contenu de notre fichier dans l’éditeur, on clique sur Deploy the stack et c’est fini !

On a pas mal d’options supplémentaires à disposition, des variables d’environnements à la récupération depuis un repo Git du docker-compose.yml, en passant par une gestion des droits utilisateurs (interne à Portainer), pour coller au mieux à nos besoins et notre organisation.

Attention cependant, Portainer ne peut pas se déployer lui-même, du coup il faudra passer par la ligne de commande et Docker Compose pour déployer Portainer, mais ça sera le seul service. Et, à part pour le mettre à jour, ce qui n’arrive pas non plus tous les quatre matins, vous n’aurez plus à toucher à un terminal :D.

Une fois le fichier docker-compose.yml défini, vous ne devriez plus avoir à le modifier et la seule commande que vous taperez sera celle pour (re)déployer le service. Donc ça ne sera pas du zéro ligne de commande, mais vous n’en ferez que très peu et surtout qu’à l’installation.

Gérez vos conteneurs Docker plus facilement

Ça y est ! On a décidé d’héberger nos services et de les déployer avec Docker. Mais on gère ça comment ?