Portainer
L'interface web qui rend Docker (et Kubernetes) accessibles à la souris : visualiser les conteneurs, démarrer une stack, consulter les logs, gérer les volumes — tout ce qu'on fait habituellement en CLI, mais dans un navigateur. Léger, auto-hébergé, et lui-même un simple conteneur Docker.
À quoi ça sert
Quand on gère un seul conteneur, la CLI Docker (docker ps,
docker logs) suffit largement. Mais dès qu'on en a une
dizaine répartis sur plusieurs machines, retenir tous les noms et
enchaîner les commandes devient fastidieux. Portainer apporte une
couche visuelle au-dessus :
- Vue d'ensemble — voir tous les conteneurs, leur état, l'usage CPU/RAM, en un coup d'œil.
- Lecture rapide des logs — clic sur un conteneur,
ses logs s'affichent en temps réel, sans
docker logs -f. - Déploiement de stacks — uploader un
docker-compose.ymlvia l'UI, Portainer le déploie et suit son état. - Gestion multi-environnements — un seul Portainer pour piloter plusieurs hôtes Docker, voire plusieurs clusters Kubernetes, depuis la même UI.
- Console dans le navigateur — équivalent
docker exec -itmais accessible à un coéquipier qui n'a pas SSH sur le serveur. - Templates et App Store — déployer un Postgres, un Grafana ou un MinIO en quelques clics depuis une bibliothèque intégrée.
Portainer Community Edition est gratuit et open-source — c'est ce qui est couvert dans cette fiche, et c'est largement suffisant pour la majorité des usages. Portainer Business Edition ajoute la gestion fine des rôles, l'authentification SSO, la gestion centralisée à très grande échelle (centaines de clusters). Gratuit jusqu'à 3 nœuds, puis payant. Sauf besoin d'entreprise spécifique, reste sur la CE.
Un exemple d'usage
Tu as un serveur où tournent plusieurs services (FastAPI, PostgreSQL, Grafana…) en conteneurs Docker. Tu veux pouvoir les visualiser et donner accès en lecture à un coéquipier sans lui filer un compte SSH. Lancer Portainer prend une commande :
docker volume create portainer_data
docker run -d \
--name portainer \
--restart=always \
-p 9443:9443 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
Portainer est lancé sur https://localhost:9443. Au
premier accès, tu crées le compte admin. Portainer voit
automatiquement tous les conteneurs Docker de la
machine via le socket monté, et tu navigues sans plus rien à
configurer.
How-to : installer et utiliser Portainer
-
Pré-requis : Docker installé
Portainer tourne dans Docker (cf. Docker) et a besoin d'accéder au démon de l'hôte via le socket
/var/run/docker.sock. Aucune autre installation n'est nécessaire. -
Lancer Portainer Community Edition
bash# Créer un volume persistant pour les données de Portainer docker volume create portainer_data # Lancer le conteneur docker run -d \ --name portainer \ --restart=always \ -p 9443:9443 \ -p 9000:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest9443= UI en HTTPS (auto-signé par défaut),9000= UI en HTTP (à éviter en prod).--restart=alwaysassure que Portainer redémarre avec la machine.Le piège docker.sockMonter
/var/run/docker.sockdans un conteneur lui donne les pleins pouvoirs sur le démon Docker hôte — équivalent root sur la machine. C'est voulu pour Portainer (il doit gérer Docker) mais ne fais jamais ça pour des conteneurs applicatifs ordinaires. -
Première connexion
Ouvre
https://<ton-host>:9443dans un navigateur. Le certificat est auto-signé → ton navigateur va râler, c'est normal. Au premier accès :- Création du compte admin (à faire dans les 5 minutes après le démarrage, sinon Portainer se verrouille pour des raisons de sécurité — il faut alors redémarrer le conteneur).
- Sélection de l'environnement à manager → choisir « local » pour gérer le Docker de la même machine (le plus courant).
-
Naviguer dans l'UI
Une fois connecté, les sections clés (menu de gauche) :
- Containers — liste, démarrer/arrêter,
logs, console, inspect (équivalent
docker inspect). - Images — voir, télécharger
(
pull), supprimer les images locales. - Volumes — gérer les volumes nommés, voir lesquels sont orphelins (à nettoyer).
- Networks — voir et créer des réseaux Docker.
- Stacks — l'équivalent
docker compose upmais dans l'UI (voir étape suivante). - App Templates — bibliothèque de stacks pré-définies (Postgres, WordPress, Nginx…) à déployer en un clic.
- Containers — liste, démarrer/arrêter,
logs, console, inspect (équivalent
-
Déployer une stack via l'UI
Le pattern le plus utile : tu as un
docker-compose.ymlque tu veux déployer sans SSH ni CLI.- Stacks → Add stack
- Coller le contenu de ton
docker-compose.ymldans l'éditeur, OU pointer un repo Git (Portainer pull automatiquement le compose, et peut même redéployer à chaque push avec un webhook). - Deploy the stack → Portainer fait
l'équivalent de
docker compose up -d. - Suivre les logs en temps réel depuis l'onglet Containers de la stack.
Stack depuis Git, mode automatiquePointer un repo Git permet le pattern « GitOps » du pauvre : un push sur main = redéploiement auto sur le serveur. Sans Argo CD ni Flux. Pratique pour un projet personnel ou une petite équipe.
-
Donner accès à un coéquipier
Plutôt que partager le compte admin :
- Users → Add user — créer un utilisateur standard avec mot de passe.
- Endpoints ou Environments → Access → assigner cet utilisateur à un ou plusieurs environnements.
- En CE, deux rôles : standard user (peut tout faire sur les environnements autorisés) ou read-only (voit mais ne touche pas). Les rôles fins sont en Business.
-
Gérer plusieurs serveurs Docker
Portainer peut piloter plusieurs hôtes depuis la même UI via son Agent à déployer sur les autres machines :
bash (sur la machine distante)docker run -d \ --name portainer_agent \ --restart=always \ -p 9001:9001 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /var/lib/docker/volumes:/var/lib/docker/volumes \ portainer/agent:latestCôté Portainer : Environments → Add environment → Docker → Agent et indiquer
<ip-distante>:9001. La nouvelle machine apparaît dans le sélecteur d'environnement. -
Sécuriser pour la prod
- Mettre Portainer derrière un reverse-proxy (cf. Traefik) avec un vrai certificat Let's Encrypt, plutôt que d'exposer le port 9443 avec son cert auto-signé.
- Ne jamais exposer le port 9000 (HTTP) en prod — utiliser uniquement 9443.
- Activer l'auth 2FA pour les comptes (depuis Settings → Authentication).
- Ne pas binder Portainer sur 0.0.0.0 si tu peux le restreindre au réseau interne (VPN, IP allowlist via le reverse-proxy).
-
Mise à jour
Portainer se met à jour en remplaçant le conteneur — le volume
portainer_dataconserve toute la config.bashdocker pull portainer/portainer-ce:latest docker stop portainer && docker rm portainer # Re-lancer avec la commande docker run de l'étape 2
Aide-mémoire
docker volume create portainer_data
docker run -d --name portainer --restart=always \
-p 9443:9443 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
docker run -d --name portainer_agent --restart=always \
-p 9001:9001 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
portainer/agent:latest
docker logs -f portainer # debug du lancement
docker restart portainer # déverrouiller setup
docker pull portainer/portainer-ce:latest # MAJ image
Portainer et le reste de l'écosystème
- Docker — Portainer est une UI au-dessus de Docker. Il ne remplace pas la CLI mais la complète : la CLI reste plus rapide pour des actions ponctuelles, Portainer est plus confortable pour la supervision et le travail en équipe.
-
Kubernetes —
Portainer sait aussi gérer des clusters Kubernetes (déploiement,
services, pods…). Plus simple que
kubectlau début, mais moins puissant qu'un vrai outil comme Lens ou k9s pour les usages avancés. - Traefik — couple naturel : Portainer pour visualiser/déployer, Traefik pour router le trafic vers les conteneurs avec des certificats Let's Encrypt automatiques. Met Portainer lui-même derrière Traefik en prod.
- Uptime Kuma — Portainer voit l'état technique des conteneurs (running, healthcheck) ; Uptime Kuma voit le service du point de vue utilisateur (réponse HTTP, latence). Les deux ensemble couvrent bien la supervision d'un petit parc.
- Grafana / Prometheus — pour des métriques fines (CPU/RAM par conteneur sur le temps, alerting), passer à Prometheus + cAdvisor + Grafana. Portainer donne une vue instantanée, pas un historique long.
- MinIO / PostgreSQL / MLflow — tous ces services tournent souvent en conteneurs Docker dans un projet MLOps. Portainer devient le tableau de bord unique pour les suivre, plutôt que jongler entre les UIs de chacun.
Sur ton poste de dev, docker compose up en CLI est
plus rapide. Portainer prend tout son sens quand tu as
un serveur distant avec plusieurs services à
surveiller, ou quand tu veux donner accès à quelqu'un qui n'est
pas à l'aise en CLI. Les deux ne s'excluent pas : les stacks
Portainer sont juste des compose files déployés via l'UI.
Pour aller plus loin
- Site officiel : portainer.io
- Documentation CE : docs.portainer.io
- Démo publique : demo.portainer.io
- Image Docker officielle : hub.docker.com/r/portainer/portainer-ce