Portainer : UI web pour Docker, Kubernetes, Swarm

Portainer : UI web pour Docker, Kubernetes, Swarm

Portainer est l'UI de reference pour gerer vos containers : Docker, Kubernetes, Swarm. Multi-environments, gestion users + ACL, stacks Docker Compose en quelques clics. Ideal pour les equipes mixtes.

Introduction

Portainer simplifie l'administration des containers :

  • Dashboards visuels (containers, images, volumes, networks)
  • Multi-environments (gerez Docker local + cluster K8s distant depuis la meme UI)
  • Editor Docker Compose / Kubernetes YAML integre
  • Logs, exec, file browser direct dans le navigateur
  • RBAC : roles et permissions par equipe
  • Templates d'apps prets
  • Webhooks pour les deploiements
  • Gratuit (Community Edition) ou Business (commercial)

Pour des admins systeme qui veulent une UI plutot que la CLI, ou pour des equipes ou tout le monde n'est pas tech.

Prerequis

  • VPS Linux avec Docker installe
  • Acces root
  • Port 9443 (HTTPS Portainer) ouvert

Etape 1 : Deploiement Portainer CE (Community Edition)

Creez le volume :

sudo docker volume create portainer_data

Lancez Portainer :

sudo docker run -d -p 8000:8000 -p 9443:9443 \
    --name portainer --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v portainer_data:/data \
    portainer/portainer-ce:latest

Etape 2 : Premier acces

Visitez https://IP_VPS:9443. Acceptez le cert auto-signe.

Creez le compte admin (mdp 12+ caracteres).

Etape 3 : Configurer l'environnement local

Apres login, Portainer detecte automatiquement le Docker local via /var/run/docker.sock.

Cliquez Get Started > Docker. L'environnement local apparait.

Etape 4 : Reverse proxy avec HTTPS valide

Pour eviter le cert auto-signe, mettez Portainer derriere Nginx + Let's Encrypt :

server {
    listen 443 ssl http2;
    server_name portainer.votre-domaine.fr;
    
    location / {
        proxy_pass https://127.0.0.1:9443;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_ssl_verify off;     # Portainer utilise son cert self-signed en interne
    }
}
sudo certbot --nginx -d portainer.votre-domaine.fr

Etape 5 : Deployer un container via UI

Containers > Add container.

Remplissez :

  • Name : nginx-test
  • Image : nginx:alpine
  • Port mapping : 8080 -> 80
  • Network : bridge
  • Restart policy : Unless stopped

Cliquez Deploy the container.

Verifiez :

curl http://IP_VPS:8080

Etape 6 : Stacks Docker Compose

Stacks > Add stack.

Web editor :

services:
  app:
    image: nginx:alpine
    ports:
      - "8081:80"
    volumes:
      - app_data:/usr/share/nginx/html
    restart: unless-stopped

  redis:
    image: redis:7-alpine
    restart: unless-stopped

volumes:
  app_data:

Cliquez Deploy the stack. Portainer cree le stack via docker-compose.

Etape 7 : Templates d'apps

App Templates : liste d'apps preconfigurees (WordPress, NextCloud, GitLab, etc.).

Cliquez sur un template, remplissez les variables (mdp, domaine), deploy.

Vous pouvez creer vos propres templates JSON et les heberger.

Etape 8 : Ajouter un environnement distant

Pour gerer un Docker / K8s distant depuis le meme Portainer :

Environments > Add environment :

  • Docker Standalone : agent Portainer sur le distant
  • Docker Swarm : agent sur le swarm
  • Kubernetes : via kubeconfig
  • Edge Agent : pour clusters edge (Pi, IoT)

Sur le distant, lancez l'agent :

sudo 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:latest

Et ajoutez dans Portainer l'URL tcp://IP_DISTANT:9001.

Etape 9 : Utilisateurs et roles

Users > Add user.

Roles disponibles :

  • Administrator : tout pouvoir
  • User : selon les permissions d'environment et ressources

Creez un user dev et donnez-lui acces a l'environment staging uniquement.

Etape 10 : Resource Control (RBAC)

Sur chaque container/stack/volume, vous pouvez definir le proprietaire et qui y a acces. Practique en multi-tenant.

Resource controls :

  • Public : tout le monde y accede
  • Restricted : seuls les users / teams listes
  • Administrators only

Etape 11 : Webhooks pour CI/CD

Sur un container, Webhook > Enable. Portainer genere une URL.

Vous pouvez appeler cette URL depuis votre CI :

curl -X POST https://portainer.votre-domaine.fr/api/webhooks/XXXX-XXXX

Portainer redeploie le container (re-pull l'image et restart).

Etape 12 : Backup et restore

Settings > Backup. Telechargez un fichier .tar.gz qui contient toute la config Portainer (users, environments, stacks).

Pour restore : reinstallez Portainer puis Settings > Restore.

⚠️ Le backup ne contient pas les volumes Docker eux-memes. Sauvegardez-les separement.

Depannage

Login impossible

Verifiez :

sudo docker logs portainer

Si vous avez oublie le mdp admin, reinitialisez :

sudo docker stop portainer
sudo docker run --rm -v portainer_data:/data portainer/helper-reset-password
sudo docker start portainer

Affiche un nouveau mdp.

"Cannot connect to Docker daemon"

Le socket Docker n'est pas mount correctement :

sudo docker inspect portainer | grep Mounts

Verifiez /var/run/docker.sock:/var/run/docker.sock.

Reverse proxy : "502 Bad Gateway"

Portainer ecoute en HTTPS sur 9443. Verifiez que votre proxy_pass utilise https:// et que proxy_ssl_verify off.

Performance lente

Si vous avez beaucoup de containers, Portainer peut etre lent. Augmentez les resources Docker :

sudo docker update --memory=2g --cpus=2 portainer

Commandes utiles

# Status
sudo docker ps -f name=portainer
sudo docker logs portainer

# Update Portainer
sudo docker pull portainer/portainer-ce:latest
sudo docker stop portainer
sudo docker rm portainer
# Relancez avec la meme commande qu'a l'install

# Volumes (sauvegarde manuelle)
sudo docker run --rm -v portainer_data:/data -v $(pwd):/backup busybox tar czf /backup/portainer-$(date +%F).tar.gz /data

# Reset password admin (Portainer doit etre stop avant)
sudo docker run --rm -v portainer_data:/data portainer/helper-reset-password

# Logs avec timestamps
sudo docker logs -t -f portainer

Conclusion

Portainer simplifie la vie quand :

  • Vous gerez plusieurs environnements
  • Vous travaillez en equipe
  • Vous voulez deleguer sans donner l'acces SSH
  • Vous voulez visualiser rapidement l'etat de vos containers

Limites :

  • Pas un outil GitOps (utilisez ArgoCD/Flux pour ca)
  • Le mode Community a quelques limites RBAC (Business pour les besoins enterprise)

Pour aller plus loin :

  • Combinez avec Watchtower pour les auto-updates de containers
  • Activez Portainer Edge pour gerer du IoT
  • Pour une approche full GitOps, regardez ArgoCD + Portainer en complement

Ressources

Rejoignez notre serveur communautaire Discord

Pour toute question, suggestion ou simplement pour discuter avec la communauté, rejoignez-nous sur Discord !

900+Membres