Informatique

Portainer.io, la Web UI de Docker

par | Fév 2, 2021 | Linux

Si comme moi, vous commencez à avoir une multitude de conteneurs Docker, il devient vite compliqué de tout gérer en console ! Je vous propose de voir dans cet article l’installation et la configuration de Portainer.io, un gestionnaire graphique de conteneurs Docker gratuit, qui vous permettra de gérer vos conteneurs directement dans une interface WEB de façon plus intuitive.

Etape 1 : Installation

Dans cet exemple, je vais installer Portainer.io sur une machine Debian 10.

Afin de pouvoir lancer une instance portainer, il faudra tout d’abord avoir un serveur docker fonctionnel. Si ce n’est pas le cas il faudra l’installer :

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent lsb-releasesudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update 
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Il ne reste plus qu’à créer et lancer le conteneur :

docker volume create portainer_data docker run -d -p 443:9443 -p 8000:8000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /var/portainer/ssl:/certs -v portainer_data:/data portainer/portainer-ce

SI votre conteneur c’est bien lancé, vous pouvez vous rendre sur l’adresse de votre serveur en https : https://<monipdeserveur>/

Etape 2 : Configuration initiale

Lors de la première connexion, il vous sera demandé de configurer votre nom d’utilisateur administrateur, ainsi que votre mot de passe.

Connexion Portainer

Une fois cette configuration terminée, vous cliquez sur local afin de vous connecter à votre instance locale de Docker.

Docker Portainer

Félicitation ! 🙂 Votre serveur Portainer est installé. :

Page accueil portainer

Vous pouvez dès à présent déployer des conteneurs Docker sur votre serveur Portainer en local. Dans la prochaine étape, nous verrons comment ajouter un autre serveur Docker.

Etape 3 : Connexion à un serveur docker externe

Méthode 1 : Activation de l’API de Docker

Afin de pouvoir connecter Portainer à un serveur Docker externe, il faut autoriser l’accès à l’API de Docker sur le serveur

Attention : la méthode détaillée ci-dessous active l’API non chiffrée et sans authentification de Docker. Si votre serveur Docker est directement exposé sur Internet il ne faut en aucun cas ouvrir ce port, dans un environnement de production, assurez-vous d’empêcher l’accès à cette API par une autre machine que Portainer.io.

Si vous souhaitez accéder à vos serveurs de façon sécurisés, je vous invite à vous rendre à la méthode 2 ou la méthode 3.

Maintenant que vous êtes avertis, on se lance 🙂 :

Connectez-vous à votre serveur Docker, puis éditez le fichier /etc/default/docker :

sudo nano /etc/default/docker

Il faudra éditer la variable d’environnement DOCKER_OPTS comme suit :

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

Et l’on redémarre le démon docker :

sudo service docker restart

Il faut ensuite se rendre sur votre serveur Portainer.io, dans l’onglet Endpoint, puis allez sur « + Add endpoint ».

Il faudra aller dans l’onglet Docker puis renseigner les différentes variables nécessaires pour se connecter :

  • Name : Le nom de votre serveur
  • Endpoint URL : Renseigner l’adresse IP de votre serveur suivi du port 2375

Toutes les autres options peuvent être laissées par défaut.

Configuration via API Docker

En cas d’erreur :

Si vous rencontrez des problèmes de connections, mettez à jour Docker et réessayez.

Si le problème persiste essayez de modifier ce fichier :

sudo nano /lib/systemd/system/docker.service

Remplacez cette ligne :

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/con$

Par cette ligne :

ExecStart=/usr/bin/dockerd -H fd:// -H=tcp://0.0.0.0:2375 --containerd=/run/con$

Puis relancez le service :

systemctl daemon.reload
systemctl restart docker.service

Méthode 2 : Via l’agent Portainer.io (recommandé)

Cette méthode a deux avantages par rapport à l’ouverture de l’API de Docker :

  • Chiffrement de la connexion
  • Authentification => une fois un serveur connecté, aucun autre ne peut s’y connecter. Il faut refaire effacer et redéployer le container pour y connecter un autre serveur.

Cela oblige par contre à déployer un conteneur sur chacun de vos serveurs Docker.

Si vous essayez de joindre un serveur Docker exposé directement sur Internet, il faudra ouvrir le port 9001. Si vous n’avez pas la possibilité d’ouvrir les ports pour joindre ce serveur, je vous invites à consulter la méthode 3.

Connectez-vous au serveur Docker sur lequel vous voulez connecter Portainer et déployer l’agent portainer sur Docker avec cette commande :

docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent

Une fois cette commande passé, vous devriez avoir l’agent en écoute sur le port 9001.

Il faut ensuite se rendre sur votre serveur Portainer.io, dans l’onglet Endpoint, puis allez sur « + Add endpoint ».

Ensuite, dans l’onglet Docker, il sera nécessaire de configurer les différentes variables nécessaires pour se connecter :

  • Name : Le nom de votre serveur
  • Endpoint URL : Renseigner l’adresse IP de votre serveur suivi du port 9001

Toutes les autres options peuvent être laissées par défaut.

Configuration via agent

Méthode 3 : Via l’agent Edge de Portainer

Quel est la différence entre l’agent Edge et l’agent classique de Portainer ? Et bien c’est tout simple, l’agent classique de portainer écoute sur le port 9001, et le serveur portainer vient s’y connecter via ce port. Dans le cas de l’agent Edge de Portainer, c’est l’agent qui vient se connecter au serveur Portainer ! Cette méthode va être très utile si vous souhaitez remonter des serveurs Docker que vous ne pouvez pas exposer sur Internet via le port 9001.

Cela impliquera cependant que le serveur Portainer soit quand a lui, accessible directement sur Internet sur le port 443 et 8000.

Pour ajouter un serveur via l’agent Edge, Il faut se rendre sur votre serveur Portainer.io, dans l’onglet Endpoint, puis allez sur « + Add endpoint ».

Il faudra se rendre dans l’onglet Docker puis renseigner les différentes variables nécessaires pour se connecter :

  • Name : Le nom de votre serveur
  • Portainer server URL : Renseignez l’adresse https publique de votre serveur Portainer

Toutes les autres options peuvent être laissées par défaut.

Configuration via agent edge

Il faudra se rendre dans l’onglet Docker Standalone, puis cliquez sur Copy command :

Copy command

Collez la commande sur votre serveur Docker SANS LA LANCER :). Comme nous avons générer un certificat autosigné plus haut, il faut ajouter un argument à cette commande afin de désactiver la validation du certificat :

-e EDGE_INSECURE_POLL=1

Une fois cet argument ajouté, vous pouvez lancez la commande qui doit ressembler à quelque chose du type :

docker run -d -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes -v /:/host -v portainer_agent_data:/data --restart always -e EDGE=1 -e EDGE_ID=aaaaaaa-aaaaaaaa-aaaaaaaaaa-aaaaaaaaaaa -e EDGE_KEY=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb -e CAP_HOST_MANAGEMENT=1 -e EDGE_INSECURE_POLL=1 --name portainer_edge_agent portainer/agent

Conclusion

Une fois votre serveur ajouté, vous devriez le retrouver sur la page d’accueil de Portainer :

Conclusion

Maintenant que votre serveur Docker est ajouté à Portainer, vous pouvez (au même titre que votre Docker local), contrôler l’ensemble de votre serveur en via Portainer.io.

Si vous souhaitez plus d’information, rendez-vous sur le site web de Portainer : https://portainer.io/