Gérer vos containers Docker avec Portainer

Gérer vos containers Docker avec Portainer, c’est une interface web facile à utiliser pour gérer et administrer tous vos containers Docker. Voici comment faire fonctionner Portainer. Il est presque impossible, aujourd’hui, d’éviter d’utiliser des conteneurs en entreprise. Les raisons de l’essor des conteneurs sont nombreuses (flexibilité, portabilité, fiabilité, etc.) ; mais quelles que soient vos raisons, vous utilisez probablement Docker comme principale plate-forme de conteneurs. Si c’est le cas, vous avez peut-être cherché une interface web qui vous permettra de gérer vos conteneurs à partir de n’importe quel navigateur pouvant accéder à votre réseau. Avec Portainer, vous pouvez extraire des images, ajouter des conteneurs, ajouter des réseaux, et bien plus encore. Cet outil est vraiment tout à fait remarquable et devrait être considéré par quiconque gère un système Docker.

Installation de Portainer

Attention!!! Pour réaliser ce tutoriel, vous devrez avoir une instance Docker d’installée sur votre VPS ou votre machine locale.

Comme je l’ai mentionné, Portainer est un conteneur. Ouvrez donc votre fenêtre de terminal (ou connectez-vous à votre serveur Docker headless) et lancez la commande suivante :

docker run -d -p 9000:9000 portainer/portainer

Installation de Portainer

Cette commande permet d’extraire toutes les images nécessaires et de créer le conteneur Portainer.

Lancez la commande sudo docker ps et vous devriez voir les conteneurs nécessaires fonctionner.

commande pour afficher les conteneurs actifs sous docker

Si l’image docker Portainer n’est pas démarré comme ci-dessus. Vous pouvez utiliser cette commande pour démarrer votre container.

docker start dedfd6540bb6 (container ID)

commande pour démarrer un container docker

Après l’exécution de la commande, ouvrez un navigateur et pointez-le sur http://SERVER_IP:9000 (où SERVER_IP est l’adresse IP du serveur hébergeant Portainer. Une fois que votre navigateur est arrivé sur la page, la première chose à faire est de définir (et de vérifier) un mot de passe pour l’utilisateur admin.

Gérer vos containers Docker avec Portainer

Après avoir créé le mot de passe, vous devrez ensuite diriger Portainer vers le serveur Docker. Il n’est pas nécessaire que Portainer fonctionne sur le même serveur que Docker.

Dans la liste choisissez un des deux modes de fonctionnement :

  • Manage the local Docker environment (votre serveur Docker et Portainer se trouve sur le même serveur)
  • Manage a remote Docker environment (donnez un nom à la connexion et entrez ensuite l’URL du point de terminaison (qui sera http://SERVER_IP:2375 – où SERVER_IP est l’adresse de votre serveur Docker).

Cliquez sur Connect et vous vous retrouverez sur le gestionnaire d’interface utilisateur de Portainer.

Si vous cliquer sur Connect et que vous avez ce message d’erreur, il va falloir arrêter le container Portainer et le démarrer avec une commande adpatée.

Message d'erreur de connexion à Portainer

Autre point important. A chaque arrêt ou redémarrage du container Portainer, les données seront effacées et il faudra refaire toute la configuration.

Lors du lancement du container nous allons lui indiquer un lieu de stockage des informations (Volume). Comme ceci lors d’une mise à jour ou d’un reboot de Portainer vos données ne seront pas perdues.

Les données des volumes sont stockées dans /var/lib/docker/volumes/.

Pour voir les volumes existants vous pouvez utiliser la commande suivante :

docker volume ls

commande Docker pour lister les volumes

Info !!! le volume local est créé lors de l’installation de docker.

Voici les commandes a exécuter pour une configuration avancée de Portainer :

docker stop dedfd6540bb6 (container ID)
docker volume create portainer_data
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Info !!! L’argument v ou –volume est composé de trois champs, séparés par des deux points ( :). Les champs doivent être dans le bon ordre, et la signification de chaque champ n’est pas immédiatement évidente. Dans le cas de volumes nommés, le premier champ est le nom du volume, et est unique sur une machine hôte donnée. Pour les volumes anonymes, le premier champ est omis. Le deuxième champ est le chemin d’accès où le fichier ou le répertoire sont montés dans le conteneur. Le troisième champ est facultatif et consiste en une liste d’options séparées par des virgules, telles que ro,rw.

Gérer vos containers Docker avec Portainer

L’interface principale de Portainer

Après avoir exécuté les commandes ci-dessus, vous devez arriver sur l’interface de Portainer. Cette interface va vous permettre de gérer très facilement les containers présents sur votre machine.

Jusqu’ici, je ne sais pas si vous avez fait attention aux termes. Mais lorsque j’ai parcouru l’interface graphique Portainer, je n’ai pas compris la différence entre Images et Containers Docker. Voici donc un début d’explication.

Une image Docker est un fichier, qui constitue une capture instantanée d’un conteneur. Généralement, les images sont créées avec la commande « docker build ». Puis, ils vont produire un conteneur quand ils sont lancés avec la commande « run ».

En revanche, dans un registre Docker, les images sont stockées comme « registry.hub.docker.com ». Comme elles peuvent devenir assez volumineuses, les images sont conçues pour composer des couches d’autres images, ce qui permet d’envoyer une quantité minimale de données lors du transfert des images sur le réseau.

Un conteneur Docker est une instance exécutable d’une image. En utilisant l’API ou la CLI de Docker, nous pouvons créer, démarrer, arrêter, déplacer ou supprimer un conteneur. Nous pouvons aussi connecter un conteneur à un ou plusieurs réseaux, y attacher de la mémoire ou créer une nouvelle image sur la base de son état actuel.

L’interface principale de Portainer

Après avoir cliqué sur votre instance Portainer, vous avez un aperçu global de votre système docker notamment :

  • 1 : Les informations système de base (nom, version de Docker, CPU, mémoire)
  • 2 : Le nombre de containers,
  • 3 : Le nombre d’images,
  • 4 : Le nombre de volumes,
  • 5 : Le nombre de réseaux

La liste des containers

La liste des containers dans Portainer

La section des containers affiche une liste détaillée des containers avec leurs états ainsi que des informations utiles (nom, image, IP, redirection de ports, …). Il est aussi possible d’effectuer certaines actions sur ces containers :

  • Démarrer
  • Arrêter
  • Kill
  • Redémarrer
  • Mettre en pause
  • Reprendre
  • Supprimer
  • Ajouter un nouveau container

Les templates

Utiliser des templates sous Portainer

Les templates permettent de lancer rapidement une instance d’un logiciel que l’on souhaite tester. Il faut éviter d’utiliser les templates pour les environnements de production mais cela reste utile et rapide pour effectuer des prototypes.

Les images

Utiliser des images de logiciels dans container

Au delà de la récupération d’une image depuis la registry Docker Hub, il est tout à fait possible de configurer sa propre registry projet pour gérer ses propres images. Au moment de l’ajout, il faudra alors spécifier cette registry pour récupérer l’image au bon endroit.

Déployer un container depuis Portainer

Déployer rapidement un container grâce à Docker Hub sous Portainer

Une des fonctionnalités intéressantes de Portainer c’est la possibilité de déployer rapidement, depuis l’interface graphique un container.

Je vous rappelle, que le site Docker Hub, regorge de container prêt à l’emploi. Il vous suffit juste de saisir un mot clé comme MySQL, WordPress, Centreon ou bien encore Icinga pour trouver un container. Vous pouvez classer les résultats par date ou bien par pertinence.

Déployer rapidement un container grâce à Docker Hub sous Portainer

Il suffit juste de noter le nom de l’image, pour pouvoir préparer votre container depuis Portainer.

Attention !!! Vous devez toujours lire les conditions d’utilisations du container. Ils vous fourniront de nombreux renseignements pour utiliser l’image de manière optimal (Mot de passe, variable à rajouter, volume à monter, …)

Déployer rapidement un container grâce à Docker Hub sous Portainer

Dans l’onglet Containers, cliquer sur + Add container.Déployer rapidement un container grâce à Docker Hub sous Portainer

Pour déployer votre container, il faudra :

  • 1 : Saisir le nom de votre container
  • 2 : Faire un copier-coller du nom de votre image que vous avez récupérer sur Docker Hub
  • 3 : Cliquer sur Deploy the container puis patienter pendant le téléchargement de l’image et l’initialisation du container.

Déployer rapidement un container grâce à Docker Hub sous Portainer

Au bout de quelques instants, le container est installé et démarre.

Créer une redirection de port

Vous devrez rediriger un port de la machine hôte vers le port du container. Si vous ne faites pas ceci il sera impossible d’accéder à votre container depuis votre IP publique.

Créer une redirection de port dans Portainer pour accéder à votre container depuis le web

Pour faire une redirection de port, il faut éditer l’image et cliquer sur Duplicate/Edit.

Créer une redirection de port dans Portainer pour accéder à votre container depuis le web

Dans Network ports configuration, il suffit dans :

  • Host de saisir un numéro de port que vous n’utilisez pas sur votre machine hôte
  • Container de saisir le port sur lequel écoute le container
  • TCP-UDP sélectionner un protocole de transport, généralement TCP

Ensuite enregistrer le tout, votre container va redémarrer pour prendre en compte sa nouvelle configuration.

Ajouter un volume

Les volumes permettent d’enregistrer sur votre machine hôtes les données de vos containers.

Afin de dissocier les données de chaque container, je vous conseille de créer un volume pour chaque container.

Il faut aller dans Volumes -> Add Volume

Ajouter un volume pour sauvegarder les données de vos containers docker

Il suffit de donner un nom au volume (1) et de cliquer sur Create the volume (2)

Ajouter un volume pour sauvegarder les données de vos containers docker

Maintenant vous devez éditer votre container, puis aller dans Advanced container settings -> Volumes -> Map additionnal volume

Ajouter un volume pour sauvegarder les données de vos containers docker

  • 1 : saisir le nom du répertoire ou du fichier qui doit être sauvegardé sur l’hôte. Généralement des indications se trouve sur le site Docker Hub pour chaque image.
  • 2 : sélectionner le volume que vous avez créé précédemment dans la liste déroulante
  • 3 : sélectionner le mode d’accès soit en écriture, soit en lecture

Pour enregistrer les modifications vous devrez régénérer le container en cliquant sur Deploy the container.

Mettre à jour Portainer

Le but de cette astuce c’est de suivre les versions de Portainer sans devoir tout recréer à chaque mise à jour.

TRES IMPORTANT !!! Auparavant depuis Portainer, vous devez télécharger la dernière image de Portainer depuis l’onglet Image. Vous devez aussi réutiliser le volume de l’ancien Portainer. C’est ici que les données sont enregistrées

J’utilise cette version de Portainer (portainer/portainer-ce), disponible sur le docker hub pour gérer mes images.

Mettre à jour Portainer

Voici l’enchainement des 8 commandes pour mettre Portainer à jour et vérifier le fichier de log du container Portainer :

docker ps -a
docker stop portainer
docker rm portainer
docker image ls
docker rmi (image-id)
docker run -d -p 9000:9000 --name Portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
docker container ls
docker logs -f -t --details Portainer
Attention !!! La cinquième commande permet de supprimer la dernière image de portainer que l’on n’utilise plus. Dans la sixième commande, il est important de prendre l’image avec le tag latest pour être sûre que l’on utilise la nouvelle image. Enfin la dernière commande permet d’afficher les logs du container Portainer afin de s’assurer qu’il n’y ait pas d’erreur.

Accéder à Portainer en HTTPS

Par défaut l’accès à Portainer se fait en HTTP. Si vous l’utiliser sur un VPS public ou même en production, je vous conseille d’utiliser le HTTPS. Nous allons voir comment créer un certificat Let’s Encrypt puis ensuite l’intégrer à notre commande démarrage de container.

Tout d’abord sur votre VPS, vous devez utiliser l’utilitaire certbot afin de générer un certificat. Vu que ce n’est pas pour un site web avec Apache ou bien Nginx, la création va être un peu différente et nous aurons besoin de créer un champ TXT dans notre DNS pour créer notre certificat.

Voici la commande (remplacer votre domaine par le votre) :

certbot certonly --manual -d portainer.guillaumereynaud.fr --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory --register-unsafely-without-email --rsa-key-size 4096

Accéder à Portainer en HTTPS en créant un certificat Let's Encrypt avec certbot

Ensuite on vous demande de créer un champ TXT, avec des informations spécifiques, aller sur votre gestionnaire DNS, puis créer le champ TXT souhaité. Ensuite appuyer sur Entrée, le challenge débute et si vous avez bien créé l’entrée dans votre DNS votre certificat est créé.

Créer un champ TXT dans votre DNS pour créer un certificat Let's Encrypt

Les certificats générés avec Let’s Encrypt sont stockés dans le répertoire /etc/letsencrypt/. Deux répertoire existe /live/ qui contient un lien symbolique vers les fichiers qui sont dans le répertoire /archive/.

Maintenant pour démarrer notre container en HTTPS, nous devons utiliser la commande suivante :

docker run -d -p 9000:9000 --name Portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /etc/letsencrypt/live/portainer.guillaumereynaud.fr/:/certs/live/portainer.guillaumereynaud.fr/ -v /etc/letsencrypt/archive/portainer.guillaumereynaud.fr/:/certs/archive/portainer.guillaumereynaud.fr/ -v portainer_data:/data portainer/portainer-ce --ssl --sslcert /certs/live/portainer.guillaumereynaud.fr/fullchain.pem --sslkey /certs/live/portainer.guillaumereynaud.fr/privkey.pem

Pa rapport à la commande initiale nous avons rajouté les options suivantes :

  • 1 volume pour le répertoire live où sont stockés les liens symboliques de notre certificat (-v /etc/letsencrypt/live/portainer.guillaumereynaud.fr/:/certs/live/portainer.guillaumereynaud.fr/)
  • 1 volume pour le répertoire archive où sont stockés les fichiers du certificat (-v /etc/letsencrypt/archive/portainer.guillaumereynaud.fr/:/certs/archive/portainer.guillaumereynaud.fr/ )
  • Les commandes permettant de charger les différents certificats (–ssl –sslcert /certs/live/portainer.guillaumereynaud.fr/fullchain.pem –sslkey /certs/live/portainer.guillaumereynaud.fr/privkey.pem)

Accéder à Portainer en HTTPS en créant un certificat Let's Encrypt avec certbot

Votre instance de Portainer est maintenant accessible en HTTPS.

Signature manuelle Guillaume

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *