Aller au contenu principal

Installation de Portainer


Objectifs du chapitre

  • Installer Portainer sur Docker standalone
  • Déployer Portainer sur Docker Swarm
  • Configurer l'agent Portainer
  • Sécuriser l'installation

1 - Installation sur Docker Standalone

Méthode rapide

# Créer le volume de données
docker volume create portainer_data

# Déployer Portainer CE
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

Explication des paramètres

ParamètreDescription
-p 9443:9443Port HTTPS de l'interface web
-p 8000:8000Port pour l'agent Edge
--restart=alwaysRedémarrage automatique
-v /var/run/docker.sockAccès au daemon Docker
-v portainer_data:/dataPersistance des données

Avec Docker Compose

# docker-compose.yml
version: "3.9"

services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
ports:
- "8000:8000"
- "9443:9443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data

volumes:
portainer_data:
docker compose up -d

Premier accès

  1. Ouvrir https://localhost:9443
  2. Accepter le certificat auto-signé
  3. Créer le compte administrateur (mot de passe fort)
  4. Sélectionner "Get Started" pour l'environnement local

2 - Installation sur Docker Swarm

Déploiement en tant que service

# Sur un manager Swarm
docker service create \
--name portainer \
--publish 9443:9443 \
--publish 8000:8000 \
--replicas=1 \
--constraint 'node.role==manager' \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=volume,src=portainer_data,dst=/data \
portainer/portainer-ce:latest

Avec Stack (recommandé)

# portainer-stack.yml
version: "3.9"

services:
agent:
image: portainer/agent:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
networks:
- agent_network
deploy:
mode: global
placement:
constraints:
- node.platform.os == linux

portainer:
image: portainer/portainer-ce:latest
command: -H tcp://tasks.agent:9001 --tlsskipverify
ports:
- "9443:9443"
- "8000:8000"
volumes:
- portainer_data:/data
networks:
- agent_network
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager

networks:
agent_network:
driver: overlay
attachable: true

volumes:
portainer_data:
docker stack deploy -c portainer-stack.yml portainer

Vérification

# Services déployés
docker service ls | grep portainer

# Logs
docker service logs portainer_portainer

3 - Agent Portainer

Pourquoi l'agent ?

L'agent Portainer permet de :

  • Gérer des environnements distants
  • Accéder aux fonctionnalités avancées (browse volumes)
  • Éviter d'exposer le socket Docker
┌─────────────────────────────────────────────────────────────┐
│ Portainer Server │
│ (Centralisé) │
└──────────────────────────┬──────────────────────────────────┘
│ Port 9001
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Agent │ │ Agent │ │ Agent │
│ Host 1 │ │ Host 2 │ │ Host 3 │
└─────────┘ └─────────┘ └─────────┘

Déployer l'agent (standalone)

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

Déployer l'agent (Swarm)

docker service create \
--name portainer_agent \
--network portainer_agent_network \
--mode global \
--constraint 'node.platform.os==linux' \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=bind,src=/var/lib/docker/volumes,dst=/var/lib/docker/volumes \
portainer/agent:latest

Connecter l'agent à Portainer

  1. Dans Portainer, aller dans Environments
  2. Cliquer sur Add environment
  3. Sélectionner Agent
  4. Entrer : <IP_AGENT>:9001
  5. Nommer l'environnement
  6. Cliquer sur Connect

4 - Edge Agent

Cas d'usage

L'Edge Agent est utile pour :

  • Environnements derrière NAT/firewall
  • Connexion sortante uniquement
  • Sites distants sans IP publique

Déploiement

  1. Dans Portainer, créer un Edge environment
  2. Copier la commande générée
  3. Exécuter sur l'hôte distant :
docker run -d \
--name portainer_edge_agent \
--restart always \
-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 \
-e EDGE=1 \
-e EDGE_ID=<EDGE_ID> \
-e EDGE_KEY=<EDGE_KEY> \
-e EDGE_INSECURE_POLL=1 \
portainer/agent:latest

5 - Configuration avancée

Variables d'environnement

docker run -d \
-p 9443:9443 \
--name portainer \
-e ADMIN_PASSWORD='$2y$...' \ # Hash bcrypt du mot de passe
-e LOGO_URL='https://example.com/logo.png' \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
VariableDescription
ADMIN_PASSWORDHash bcrypt du mot de passe admin
LOGO_URLURL du logo personnalisé
TEMPLATES_URLURL des templates personnalisés

Générer le hash du mot de passe

# Avec htpasswd
htpasswd -nbB admin 'votre-mot-de-passe' | cut -d ":" -f 2

# Ou avec Docker
docker run --rm httpd:alpine htpasswd -nbB admin 'votre-mot-de-passe' | cut -d ":" -f 2

HTTPS avec certificat personnalisé

docker run -d \
-p 9443:9443 \
--name portainer \
-v /path/to/certs:/certs \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest \
--ssl \
--sslcert /certs/cert.pem \
--sslkey /certs/key.pem

6 - Installation avec Traefik

Docker Compose avec Traefik

version: "3.9"

services:
traefik:
image: traefik:v2.10
command:
- "--api.dashboard=true"
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "[email protected]"
- "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.le.acme.httpchallenge.entrypoint=web"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- letsencrypt:/letsencrypt

portainer:
image: portainer/portainer-ce:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.portainer.rule=Host(`portainer.example.com`)"
- "traefik.http.routers.portainer.entrypoints=websecure"
- "traefik.http.routers.portainer.tls.certresolver=le"
- "traefik.http.services.portainer.loadbalancer.server.port=9000"

volumes:
portainer_data:
letsencrypt:

7 - Mise à jour de Portainer

Standalone

# Arrêter et supprimer le conteneur
docker stop portainer
docker rm portainer

# Télécharger la nouvelle image
docker pull portainer/portainer-ce:latest

# Redéployer (les données sont dans le volume)
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

Swarm

# Mettre à jour le service
docker service update \
--image portainer/portainer-ce:latest \
portainer_portainer

# Mettre à jour l'agent
docker service update \
--image portainer/agent:latest \
portainer_agent

8 - Dépannage

Portainer ne démarre pas

# Vérifier les logs
docker logs portainer

# Vérifier le socket Docker
ls -la /var/run/docker.sock

# Permissions du socket
sudo chmod 666 /var/run/docker.sock

Impossible de se connecter

# Vérifier que le conteneur tourne
docker ps | grep portainer

# Vérifier les ports
docker port portainer

# Tester la connectivité
curl -k https://localhost:9443

Réinitialiser le mot de passe admin

# Arrêter Portainer
docker stop portainer

# Réinitialiser
docker run --rm -v portainer_data:/data portainer/helper-reset-password

# Redémarrer
docker start portainer

Résumé

ModeCommande clé
Standalonedocker run ... portainer/portainer-ce
Swarmdocker stack deploy avec agent
Agentdocker run ... portainer/agent
EdgeAgent avec connexion sortante
Points clés
  • Toujours créer un volume pour la persistance
  • Utiliser l'agent pour les environnements distants
  • HTTPS activé par défaut sur le port 9443
  • Les données survivent aux mises à jour

Exercices pratiques

  1. Installez Portainer sur votre machine locale
  2. Créez un compte administrateur sécurisé
  3. Ajoutez un environnement distant avec l'agent
  4. Configurez HTTPS avec un certificat personnalisé

← Introduction | Interface utilisateur →