Synology [Tuto] Installer Portainer en Docker sur un NAS Synology

EVO

Administreur
Membre du personnel
25 Novembre 2019
8 159
1 563
278
/var/run/docker.sock
Bonjour,
Voici un petit tuto, pour ceux qui souhaiterai installer Portainer sur un NAS Synology.

Portainer%20Logo%20Solid%20All%20-%20Blue%20no%20padding.svg

Portainer, c'est quoi ?
Portainer est une interface utilisateur de gestion légère qui vous permet de gérer facilement vos différents environnements Docker (hôtes Docker ou clusters Swarm). Portainer se veut aussi simple à déployer qu'à utiliser. Il se compose d'un seul conteneur qui peut s'exécuter sur n'importe quel moteur Docker (peut être déployé en tant que conteneur Linux ou conteneur natif Windows, prend également en charge d'autres plates-formes). Portainer vous permet de gérer toutes vos ressources Docker (conteneurs, images, volumes, réseaux et plus!). Il est compatible avec le moteur Docker autonome et avec le mode Docker Swarm.

Vous pouvez essayer l'instance de démonstration : http://demo.portainer.io/ (connectez-vous avec le nom d'utilisateur admin et le mot de passe tryportainer).

Pré-requis :
Avoir installé le paquet Docker
Avoir un accès SSH au Synology*

* Pour faire cette manip, il vous faudra vous connecter en SSH à votre NAS, si vous ne savez pas le faire, vous trouverez ici un tuto explicatif : [Tuto] Acceder à son NAS en lignes de commande.

A modifier selon votre installation :
Toute mon installation, va ce faire dans un dossier partagé "docker" situé sur "@volume1"
Je vais donc installer portainer dans dossier portainer créer dans /volume1/docker ( ce qui donne /volume1/docker/portainer )

Note : Cette installation n'est pas possible via Docker DSM, car Portainer demande l'acces au sock Docker.

Sommaire :
1/ Création du conteneur en SSH
2/ Accès à l'interface de Portainer et identification
3/ Mise a jour de Portainer en SSH
4/ Ajout de la surveillance Watchtower


1/ Création du conteneur en SSH
Une fois logger en SSH on passe en root avec la commande :
Code:
sudo su -
Notre mot de passe est re-demandé afin de confirmer. Puis pour créer le conteneur on indique la commande suivante, qu'on valide :
Code:
sudo docker run -d -p 8000:8000 -p 9000:9000 --restart=unless-stopped --name="portainer" -v /var/run/docker.sock:/var/run/docker.sock -v /volume1/docker/portainer:/data portainer/portainer-ce
N'oublier pas de changer la partie "/volume1/docker/portainer" en fonction de votre configuration !

2/ Accès à l'interface de Portainer et identification
Dans votre navigateur, il vous suffit maintenant de taper l'adresse ip de votre NAS suivi du port 9000 pour se connecter a l'interface Web de Portainer.
Exemple : Si l'ip de votre NAS est 192.168.0.20 alors l'adresse est http://192.168.0.20:9000
Bien sur, si le pare-feu de votre NAS est actif, ce port devra être autorisé dans celui-ci !

A la 1ere connexion, il vous faudra créer un utilisateur administrateur :
iNxb3n1.png

Choisissez un mot de passe fort, je vous conseil aussi de ne pas utiliser l'utilisateur "admin" par défaut et de le remplacer par un pseudo de votre choix.

Ensuite, Portainer souhaite savoir comment il doit se connecter a notre environnement "docker" :
ifRRjvW.png

On clique sur "Local", puis sur "Connect"

La configuration est finie :D

Maintenant, la page d’accueil s'affiche avec un résumé des conteneurs en cours, si on clique dessus, on peut avoir plus de détails, mais aussi les gérer, ..
MDuHPpT.png


3/ Mise a jour de Portainer en SSH
D'abord nous allons arrêter le conteneur :
Code:
sudo docker stop portainer

Puis, on le supprime :
Code:
sudo docker rm portainer

Avec la commande suivante, nous allons récupérer la nouvelle image de portainer-ce :
Code:
docker pull portainer/portainer-ce

Une fois le téléchargement terminé, il suffit de reprendre le tuto a l'étape 1 ( installation de portainer ).

Une fois installé, vous pouvez aller dans Images et filtrer par "Unsused" afin de supprimer les images inutilisées présentes sur votre système.

4/ Ajout de la surveillance Watchtower

Dans le cas, ou vous souhaitez que Watchtower surveille Portainer, afin de le mettre a jour automatiquement ( par rapport a ce tuto ) alors il vous faut rajouter le label a la création du conteneur.

Voici un exemple :
Code:
sudo docker run -d -p 8000:8000 -p 9000:9000 --label="com.centurylinklabs.watchtower.enable=true" --restart=unless-stopped --name="portainer" -v /var/run/docker.sock:/var/run/docker.sock -v /volume4/docker/portainer:/data portainer/portainer-ce

29-04-2021 - Rajout du = oublié dans la commande au niveau de --restart=unless-stopped
06-02-2021 - Rajout du 3/ Mise a jour de Portainer en SSH et 4/ Ajout de la surveillance Watchtower
15-09-2020 - Changement de la commande pour être en v2

Source : https://www.portainer.io/ , https://github.com/portainer/portainer
 
Dernière édition:
  • J'adore
Réactions: maxou56
Hello,
Portainer 2.0 est sorti !
Pour l'installer le repo change, la commande deviens donc :
Code:
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /volume1/docker/portainer:/data portainer/portainer-ce

Bien sur, il faut adapter "/volume1/docker/portainer" suivant votre config.
 
tiens tu as su le passer en HTTPS ton portainer?
même si c'est du lan, je m'étonnais de ne pas trouver l'option adéquate
 
purée, suis mal reveilé, c'est ce que je fais avec mes autres applications en plus :lol: enfin celles qui sont dispo via un sous domaine
 
Allez une petite inscription rapide sur le forum pour dire merci! Je ne connaissais pas et ca me semble très pratique. En tout cas le tuto est simple et efficace!
 
UPDATE : J'ai simplement activer le container depuis l'inteface Docker de DSM, et c'est bon ca marche



Salut,

J'utilise Docker sur mon DS918+, mais n'étant pas très à l'aise en ligne de commande, je n'ai pour l'instant utilisé que des containers installés depuis l'interface DSM. Je voulais installé portainer, en particulier pour installer ensuite Watchower.

J'ai donc suivi le tuto, mais j'ai un petit soucis. A la fin de l'installation j'ai eu le message suivant :
Code:
docker: Error response from daemon: Bind mount failed: '/volume1/docker/portainer' does not exists.

J'ai tenté de me connecté à mon NAS en local sur le port 9000, sans succès, même après avoir ouvert son accès sur ma livebox.
Je me suis dis que l'installation n'avait donc pas du être faite, si le répertoire /volume1/docker/portainer n'existait pas. J'ai donc créer ce répertoire directement depuis DSM , et retenter une installation. Mais j'ai le message suivant:

Code:
docker: Error response from daemon: Conflict. The container name "/portainer" is already in use by container "a85a1759b7e7fe0a6f913404758afe695d43454e6a6d3436254a8c7ab58c6390". You have to remove (or rename) that container to be able to reuse that name.

Voila, étant un peu noob dès en linux et ligne de commande, un peu d'aide serait pas de refus ;)
 
Salut,
Effectivement la 1ere erreur indique que le dossier n'existe pas ( le chemin n'est pas bon peut etre ? )

par contre, il est possible que le conteneur se soit créer quand meme.

Pour le supprimer il te suffit de faire :
Code:
docker rm portainer

Ensuite tu peu reprendre la création du conteneur avec le tuto.
 
EVOTk a dit:
Salut,
Effectivement la 1ere erreur indique que le dossier n'existe pas ( le chemin n'est pas bon peut etre ? )

par contre, il est possible que le conteneur se soit créer quand meme.

Pour le supprimer il te suffit de faire :
Code:
docker rm portainer

Ensuite tu peu reprendre la création du conteneur avec le tuto.

T'as été trop rapide, merci à toi !!
J'ai mis à jour mon message. Après avoir créer le répertoire portainer manuellement via DSM, et après avoir activer le container aussi via DSM, ca fonctionne.
Est-ce que normalement le répertoire portainer aurait du se créer automatiquement, ou aurait il fallu que je le créer avant ? Mon répertoire docker est pourtant bien sur /volume1/docker, je ne comprend pas pourquoi ca n'a pas créer le répertoire automatiquement, si ca devait l'être.

Si ca fonctionne ainsi est ce que je peux l'utiliser ou tu me conseille de retenter une install "propre" ?
 
Salut,
Le dossier ne se créer pas tout seul, il faut forcément, créer les dossier dont le conteneur a besoin avant.

Si le dossier n'existe pas, docker peut etre aussi créer un "volume" afin d'y stocker les données, volumes qui sera perdu en cas de MAJ/ ... Il faut donc etre sur que le conteneur utilise bien le dossier indiqué et non un volume !

Si dans ton dossier /docker/portainer tu as des dossiers qui se sont créer, alors c'est bon, le conteneur utilise bien ton dossier ! ( voir ci dessous )
ZePRz16.png

Si ton dossier est vide, alors portainer utilise un volume, et pas ton dossier, je te conseil donc de re-commencer le création du conteneur.
 
C'est tout bon alors, j'ai exactement le même contenu que tu montres dans le répertoire /docker/portainer
Merci pour tes explications toujours hyper claires ;)
 
Salut, Merci pour ce tuto, j'ai aussi découvert l'installation de Watchtower et l'utilisation de Discord (pas utilisateur) pour centraliser les messages...
A voir dans le temps si vraiment utile :)
A+
 
Salut @EVOTk

On se retrouve sur un énième fofo ;)
J'essaie de le mettre en place via le docker synology. J'ai adapté les dossiers comme suit :
DGopT4M.png

Quand je veux configurer Portainer en local j'ai ceci :
DS5ti70.png


As-tu une idée du pourquoi ?
 
Salut,
Il faut passer en ssh pour l'installation de portainer ( ou pire via le gestionnaire de tache planifié )
 
Je viens de voir ta réponse.
Peut-être pourrais-tu l'indiquer dans ton tuto en bien gras et rouge pour qu'on ne te repose pas la question ;)
N'y aurait-il pas une petite coquille sur le restart de la ligne de code du tuto ? --restart=unless-stopped ?!
 
Alandil a dit:
Je viens de voir ta réponse.
Peut-être pourrais-tu l'indiquer dans ton tuto en bien gras et rouge pour qu'on ne te repose pas la question ;)
Si tu veut, apres le tuto explique une méthode pourquoi en utiliser une autre ? Il existe d'autre méthode ( comme par exemple ce servir des taches planifié ) mais si tu viens sur un tuto c'est pour le suivre non ? :)


Alandil a dit:
N'y aurait-il pas une petite coquille sur le restart de la ligne de code du tuto ? --restart=unless-stopped ?!

Non, pour ma part, je place ceci sur tous mes conteneurs. pour l’explication restart peut avoir 4 possibilités :

--restart=no - Ne redémarrez pas automatiquement le conteneur. ( Si tu ne précise pas --restart, alors c'est "no" par defaut également )
--restart=on-failure - Redémarrez le conteneur automatiquement s'il s’arrête sur une erreur.
--restart=always - Toujours redémarrez le conteneur s'il s'arrête. S'il est arrêté manuellement, il est redémarré uniquement lorsque le démon Docker redémarre ou que le conteneur lui-même est redémarré manuellement.
--restart=unless-stopped - Similaire à always, sauf que lorsque le conteneur est arrêté (manuellement ou autrement), il n'est pas redémarré même après le redémarrage du démon Docker.

Tu trouvera plus d'info encore dans la docs officiels docker : https://docs.docker.com/config/containers/start-containers-automatically/
 
EVOTk a dit:
Si tu veut, apres le tuto explique une méthode pourquoi en utiliser une autre ? Il existe d'autre méthode ( comme par exemple ce servir des taches planifié ) mais si tu viens sur un tuto c'est pour le suivre non ? :)
Tu as raison :D
EVOTk a dit:
Non, pour ma part, je place ceci sur tous mes conteneurs. pour l’explication restart peut avoir 4 possibilités :

--restart=no - Ne redémarrez pas automatiquement le conteneur. ( Si tu ne précise pas --restart, alors c'est "no" par defaut également )
--restart=on-failure - Redémarrez le conteneur automatiquement s'il s’arrête sur une erreur.
--restart=always - Toujours redémarrez le conteneur s'il s'arrête. S'il est arrêté manuellement, il est redémarré uniquement lorsque le démon Docker redémarre ou que le conteneur lui-même est redémarré manuellement.
--restart=unless-stopped - Similaire à always, sauf que lorsque le conteneur est arrêté (manuellement ou autrement), il n'est pas redémarré même après le redémarrage du démon Docker.
J'évoquais que dans la ligne de code de l'étape d'installation via SSH, il manque un "=" juste après restart :rolleyes: