Docker : gérer vos conteneurs avec Portainer.io

Dans ce tutoriel, je vais vous expliquer comment gérer vos conteneurs Docker avec Portainer.

Portainer est une application qui fonctionne sous Docker et qui va vous permettre d’avoir une interface graphique (Web) pour gérer vos conteneurs sous Docker.

Avec Portainer vous allez pouvoir :

  • Créer / Modifier / Supprimer des conteneurs
  • Administrateurs vos containers (accès SSH)
  • Avoir des statistiques d’utilisation des ressources
  • Gérer les images et volumes qui ne sont plus utilisés

Portainer facilite l’utilisation des conteneurs Docker surtout quand on est pas adepte des lignes de commandes.

Portainer existe en deux versions :

  • Community : qui est un version gratuite au fonctionnalité « limité »
  • Business : qui offre quelque fonctionnalité supplémentaires. (il est possible d’avoir une licence gratuite pour 5 noeuds).

Pour comparer les éditions, je vous laisse le faire sur : https://www.portainer.io/features

Vous l’aurez compris, pour installer et utiliser Portainer vous avez besoin d’un serveur avec Docker d’installé.

Installation de portainer

Nous allons maintenant voir comment installer portainer, dans ce tutoriel je vais utiliser docker-compose.

Je trouve pratique l’utilisation de docker-compose avec le fichier de configuration.

Sur votre serveur, créer un dossier où l’on va stocker le fichier docker-compose.yml.

Personnellement j’utilise un dossier container à la racine

Créer le dossier :

sudo mkdir portainer

Aller dans le dossier que l’on vient de créer :

cd portainer

Créer le fichier docker-compose.yml :

sudo touch docker-compose.yml

Editer le fichier :

sudo nano docker-compose.yml

Coller le contenu du fichier ci-dessous :

Le port 8000 et 9000 sont des ports historiques dont vous ne devriez pas avoir besoin.

Sauvegarder le fichier.

Télécharger l’image avec la commande :

sudo docker-compose pull

Une fois l’image télécharger, démarrer le conteneur Portainer avec la commande :

sudo docker-compose up -d

Patienter pendant la création du conteneur et son démarrage.

On aurait pu exécuter directement le commande docker-compose up -d pour télécharger l’image et créer le conteneur.

Une fois le conteneur démarré, on peut vérifier son fonctionnement avec la commande sudo docker ps.

Le conteneur portainer est prêt.

Configuration post-déploiement

La configuration post-déploiement, permet surtout de configurer le mot de passe du compte admin.

Ouvrir un navigateur Internet et aller à l’url : https://ip-server:9443 et valider l’erreur de certificat.

On arrive sur une page qui nous demande de configurer un compte administrateur, entrer un mot de passe 1 et confirmer le 2 puis cliquer sur le bouton Create user 3.

Ensuite on est redirigé vers le portail, cliquer sur Get Started 1 ou Home 2 dans le menu de navigation.

Découverte des fonctionnalités portainer

Dans cette partie, je vais vous présenter « rapidement » portainer afin que vous puissiez découvrir ce que vous pouvez faire avec.

Sur la page « Home », on retrouve notre serveur local où est le conteneur Portainer, d’un seul coup d’œil, on peut voir le nombre de conteneurs et leur état général.

En cliquant sur le serveur, on arrive sur un autre page, qui va nous permettre d’accéder à différents élément du service Docker.

Les stacks sont des groupes de conteneur(s), on va surtout retrouver dans les stacks, les conteneurs qui ont été créés avec docker-compose.

Il est possible de créer de nouveau stack depuis l’interface de portainer et celui-ci pourra être gérer depuis l’interface web

Dans la partie containers, on retrouve tous les conteneurs du serveur, qu’il soit en stack ou non, depuis cette page, il est possible d’agir sur les conteneurs (démarrer / arrêter / redémarrer …) et aussi de créer un nouveau conteneur.

En cliquant sur le nom d’un conteneur, on arrive sur page qui le détail et d’où l’on peut également effectuer différentes actions.

Images, ici on retrouve l’ensemble des images de conteneurs qui sont sur le serveur, il est possible de supprimer les images inutilisés depuis cette vue.

Volumes : comme pour les images, on va retrouver ici tous les volumes utiliser pour les conteneurs.

Networks : on retrouve ici les différents créer par les stacks et docker.

Depuis Portainer on peut également accéder à différents éléments des conteneurs comme :

  • Les logs
  • Performances
  • Console SSH

Vous pouvez maintenant gérer vos conteneurs à l’aide d’une interface graphique.

Gérer plusieurs serveurs Docker avec portainer-agent

Il est possible de gérer plusieurs serveurs Docker du Portainer, pour cela il faut installer un agent qui est aussi en conteneur sur le serveur que l’on souhaite administrer.

Il existe deux agents :

  • Portainer agent
  • Portainer Edge agent

La principale différence entre les deux agents et le sens de communications, avec Portainer agent, la communication est initiée depuis Portainer donc les actions sont instantanées comme si on gère l’agent local alors que Portainer Edge agent vient se connecter à Portainer à intervalle régulier pour vérifier si des actions sont a effectuées.

Portainer agent est à utiliser avec précaution, car l’agent n’a pas d’authentification, ce qui permet de se connecter dessus depuis n’importe quel portail Portainer.

Il y a quand même une sécurité, un agent ne peut pas être lié à deux instance Portainer simultanément, par contre si l’agent n’a pas de communication avec son instance pendant 90 jours, il perd le lien avec son intance.

On évite donc de publier Portainer agent directement sur Internet, même en interne on assure la sécurité avec un firewall.

Je vais quand même vous expliquez comme sécurisé l’agent avec Nginx si vous souhaitez l’utiliser avec un IP publique.

Sur le serveur que vous souhaitez administrer, comme pour portainer, créer un dossier et dedans un fichier docker-compose.yml et coller le contenu ci-dessous :

Récupérer l’image :

sudo docker-compose pull

Démarrer le conteneur :

sudo docker-compose up -d

Maintenant que l’agent fonctionne, il faut l’ajouter dans l’interface Web de portainer.

Depuis le menu de navigation, cliquer sur Environnements 1 et ensuite cliquer sur Add environnement 2.

Indiquer le nom du serveur 1 ainsi que son adresse IP et le port de l’agent 2 (par défaut 9001) et cliquer sur le bouton Add environnement 3.

L’agent est ajouté :

Sur la page d’accueil, on peut voir les deux serveurs Docker.

Vous pouvez gérer le serveur distant de la même façon que le serveur local

Au départ de cette partie, j’ai parlé sécurité, je vais vous donner deux solutions pour « sécurisé » l’agent et l’instance.

Sécurisé portainer-agent avec Nginx et un pare-feu

La première solution que je vous propose, c’est de sécurisé l’accès à l’agent en utilisant le pare feu de votre serveur Linux et les fonctionnalités de reverse proxy de Nginx. Le module stream de nginx doit être installé

Si l’agent est cours de fonctionnement arrêter le.

La première étape va être d’autoriser l’adresse IP de votre serveur où portainer est installé :

sudo ufw allow from server-ip-portainer

Cette commande est valable sur Ubuntu avec ufw

Editer le fichier /etc/nginx/nginx.conf et après le block http{} ajouter :

Editer le fichier docker-compose.yml de l’agent pour modifier l’exposition du port :

Il faut modifier le port 9001 car celui-ci est utiliser par Nginx, pour ce tutoriel, j’ai utilisé le port 9002 qui est configuré dans le bloc stream{}. J’ai aussi ajouté l’adresse IP 127.0.0.1 pour éviter qu’il soit publié sur toute les IP notamment l’adresse publique.

Tester la configuration Nginx :

sudo nginx -t

Si tout est bon, redémarrer nginx :

sudo systemctl restart nginx

Démarrer le conteneur avec up -d pour recharger la configuration :

sudo docker-compose up -d

Avec cette solution, le port 9001 doit être disponible seulement à votre serveur portainer

Utiliser un VPN

La seconde solution pour sécurisé la publication de l’agent va être d’utiliser un VPN entre les deux serveurs Docker.

Vous pouvez utiliser les services tailscale qui propose une solution VPN jusqu’à 20 clients.

Une fois le VPN en place, il faut adapter la configuration de l’agent dans docker-compose :

ports:
      - vpn-ip:9001:9001

Et dans portainer, il faut configurer l’adresse IP de la carte du VPN.


Vous avez maintenant toutes les informations nécessaires pour gérer vos conteneurs Docker avec portainer.