Ce tutoriel fonctionne aussi pour Portainer Community Edition (CE) : il faudra juste ajuster le fichier docker-compose.yml en changeant l'image.
- 1. Pré-requis
- 2. Préparation du nécessaire
- 3. Création du conteneur en SSH avec
docker compose
- 4. Connexion à l'interface WEB
- 5. Exemple de création de stack, avec Watchtower
- Savoir accéder au NAS en SSH via un terminal ;
- Avoir installé le paquet Docker Engine via App Central ;
- Avoir quelques rudiments sur l'utilisation de Docker et le vocabulaire qui va avec ;
- Avoir créé un dossier partagé
/volume1/docker/
; - Savoir créer un utilisateur, et lui affecter des droits de lecture/écriture sur un dossier partagé ;
- (Optionnel) Savoir créer un groupe, lui affecter des utilisateurs et des droits de lecture/écriture sur les dossiers partagés.
Depuis l'interface d'ADM (dans "Access Control"), il faut créer un utilisateur dédiée à Portainer qui aura les droits d'accès aux dossiers créés précédemment.
Noter au passage le UID de cet utilisateur, nous en aurons besoin plus bas.
Il nous faut aussi le GID du groupe auquel appartient cet utilisateur. Si vous n'avez pas choisi de créer un groupe dédié à Docker, qui n'a les droits d'accès que sur le dossier /volume1/portainer/
. Ce GID est présent aussi dans le Access Control, dans la section "Local Group".
-
Quand je crée un conteneur, j'utilise toujours un volume défini par un point de montage sur le NAS, ainsi les données sont toujours présentes, même si je supprime le conteneur.
Je ne passe donc pas par un volume non persistant. -
On va considérer que les dossiers des conteneurs sont présents dans le dossier
/volume1/docker/
, si ce dossier n'existe pas, soit il vous faudra le créer soit vous devrez utiliser un autre dossier que vous avez déjà créé/utilisé. -
Nous créons donc un nouveau dossier dans
/volume1/docker/
avec la commande suivante :mkdir -p /volume1/docker/portainer/data
Note : (cliquer pour lire)
L'option
-p
va permettre de créer les sous-dossiers qui manquent et ne renverra pas d’erreurs s'ils existent.
Pour installer Portainer, on va passer par l'utilisation de la commande docker compose up -d
depuis le dossier /volume1/docker/portainer/
.
Pour cela, il faudra placer le fichier docker-compose.yml
suivant dans le dossier /volume1/docker/portainer/
:
version: "2.4"
services:
portainer:
## Image pour Portainer CE (Community Edition, gratuite)
# image: portainer/portainer-ce:latest
## Image pour Portainer EE (Businnes Edition, 5 Nodes gratuits : https://www.portainer.io/take-5 )
image: portainer/portainer-ee:latest # https://docs.portainer.io/start/upgrade/tobe/docker#upgrading-from-version-2.0.0-and-later
container_name: portainer
hostname: portainer
network_mode: bridge
environment:
- PUID=1045
- PGID=100
## ################################################
## Label pour Watchtower qui fera une mise à jour automatique. Peut être supprimé/commenté si Watchtower ne sera pas utilisé.
labels:
- "com.centurylinklabs.watchtower.enable=true"
## ################################################
volumes:
# Ce volume est celui qui va contenir les données de portainer.
- /volume1/docker/portainer/data:/data
# Ce volume est le docker.sock, vital pour controler Docker, mais aussi risqué. Il ne faut pas le mettre dans n'importe quel conteneur. Surtout qu'ici il sera en lecture+écriture...
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 9000:9000 # Web-UI
# - 8000:8000 # Edge Agent : https://docs.portainer.io/admin/environments/add/edge
# - 9443:9443 # Portainer API : https://docs.portainer.io/api/access
restart: always
healthcheck:
test: ["CMD", "/docker", "container", "top", "portainer"]
start_period: 15s
interval: 90s
timeout: 10s
retries: 3
Les ports 8000
et 9443
ne sont pas indispensables pour une utilisation simple. Tout dépendra de l'usage de Portainer. Pour le moment on les laisse commentés, donc non utilisés.
Il faut :
- se placer en mode root, ou bien il faudra taper
sudo
devant la commande ; - aller dans le dossier contenant le fichier
docker-compose.yml
; - lancer la commande :
docker compose up -d
sudo -i
cd /volume1/docker/portainer/
docker compose up -d
Note : (cliquer pour lire)
Cette commande va récupérer l'image présente dans le fichier
docker-compose.yml
et construire le conteneur selon ses spécifications. Le paramètre-d
sert à lancer le conteneur en modedaemon
c'est-à-dire qu'il s'exécutera en arrière plan, même quand la commande sera terminée.
Le processus de création est alors lancé :
Une fois terminé, vous aurez ceci :
Il sera alors temps de passer à l'interface WEB.
Il suffit te taper l'adresse IP du NAS suivi du port de connexion 9000 dans un navigateur : http://192.168.0.100:9000
.
Il faudra alors choisir un mot de passe robuste. Il est également possible de changer le nom de l'administrateur de Portainer. Pour le tuto, je laisse admin.
Il est également possible de restaurer une sauvegarde de Portainer faite auparavent :
Note pour ceux qui ne vont pas vite : (cliquer pour lire)
Si comme moi vous tardez à créer le compte administrateur de Portainer lors de la première connexion, vous aurez cet écran :
Il faudra alors, recréer le conteneur, et ne pas tarder autant à aller créer l'administrteur 😃
Dans le cas de l'édition Business pour laquelle vous avez récupérer gratuitement une licence pour 5 noeuds, c'est ici qu'il faut entrer cette licence :
On arrive ensuite sur cet écran :
Il est possible de renommer l'environnement actuellement appelé "local" :
On pourra alors voir dans la liste des conteneurs le seul et unique actuellement lancé : Portainer.
Sa stack n'est pas modifiable compte tenu qu'il a été créé en-dehors de portainer.
Une stack dans Portainer, c'est ce qui va permettre de créer un ou plusieurs conteneurs en même temps, liés ou non.
Je vais prendre l'exemple de Watchtower, conteneur qui permet de mettre à jour à intervale fixe les conteneurs qui possèdent le label adapté :
labels:
- "com.centurylinklabs.watchtower.enable=true"
Dans l'éditeur WEB, il faut coller le contenue d'un fichier docker-compose.yml
après avoir donné un nom à la stack :
Voilà le contenue du fichier docker-compose.yml
que je vais utiliser. J'utilise les notifications email, il faudra modifier les paramètres SMTP en adéquation avec votre fournisseur).
#
# Doc de Watchtower : https://containrrr.dev/watchtower/
# Dépôt GitHub : https://github.com/containrrr/watchtower/
#
---
version: "2.4"
services:
watchtower:
image: containrrr/watchtower:amd64-latest
container_name: watchtower
network_mode: bridge
environment:
- WATCHTOWER_NOTIFICATIONS=email
#- WATCHTOWER_NOTIFICATIONS_LEVEL=debug
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_REMOVE_VOLUMES=true
- WATCHTOWER_DEBUG=true
- WATCHTOWER_LABEL_ENABLE=true
- WATCHTOWER_TIMEOUT=30s
# Utiliser soit SCHEDULE soit INTERVAL (ce dernier en sec)
# Pour SCHEDULE : https://crontab.guru/#0_9_*_*_*
# Ajouter un 0 en premier pour les secondes : secondes | minutes | heures | jour du mois | mois | jour de la semaine
#- WATCHTOWER_SCHEDULE=0 0 6 * * *
- WATCHTOWER_SCHEDULE=0 0 5 * * *
#- WATCHTOWER_POLL_INTERVAL=3000
- TZ=Europe/Paris
#####################################################################
# Pour les notifications en emails :
- WATCHTOWER_NOTIFICATIONS_HOSTNAME=Asustor-AS6704T
- [email protected]
- [email protected]
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER=mail.ndd.tld
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
- [email protected]
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=0123456789@azertyuyuiop
- WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2
#####################################################################
labels:
- "com.centurylinklabs.watchtower.enable=true"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
Un message apparaitra en haut à droite indiquant le succès de l'opération ou au contraire son échec.
Une fois terminé, on a notre nouvelle stack et notre nouveau conteneur :
Dans mon exemple, j'ai bien reçu l'email de lancement d'après création :
Voilà. À vous de jouer, et de créer plein de conteneurs ^^
Date de création du tuto : 09/11/2022