Docker c’est bien. Docker c’est beau. Mais Docker c’est du CLI et ça peut rebuter. En revanche ça peut vous faciliter la vie si vous voulez gagner du temps, n’êtes pas à l’aise en CLI ou si votre serveur « tourne bien et je VEUX PAS Y TOUCHER SINON JE VAIS TOUT PLANTER !!!! » :)
Du coup y’a un marché pour les WebUI/GUI pour Docker et le plus intéressant est le projet Portainer.io, qui fonctionne pour Linux, Windows et OSX.
Portainer s’installe en quelques commandes simples et permet de gérer depuis une interface ergonomique un Docker local ou distant et tout ce qui va avec : containers, paramètres, IP, données, clusters, nom de domaines…
- Installation Docker & Portainer (Linux seulement)
- Déplacer le dossier racine de Docker (Linux seulement)
- Utilisation (exemple d’un container ruTorrent)
J’installe Docker & Portainer sur un de mes serveurs hôtes ProxMox (basé sur Debian). De cette manière je peux exploiter une machine (et ses nodes) pour de la virtualisation selon mes besoins.
On commence par ajouter les sources de Docker et l’installer. Commandes exécutées via mon User ayant des droits sudo. Si vous le faites en root retirez sudo des lignes.
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common sudo curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - sudo apt-key fingerprint 0EBFCD88 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" sudo apt update && sudo apt install docker-ce
On crée ensuite un User pour Portainer (que je vais nommer Portainer \o/) et on l’ajoute au groupe Docker.
sudo adduser portainer sudo usermod -aG docker portainer
Si vous voulez tester que tout fonctionne bien vous pouvez lancer un hello-world avec votre nouveau User portainer.
[email protected]:~# su portainer [email protected]:~$ cd ~ [email protected]:~$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world ca4f61b1923c: Pull complete Digest: sha256:be0cd392e45be79ffeffa6b05338b98ebb16c87b255f48e297ec7f98e123905c Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. [...]
On va ensuite créer un dossier dans le /home de Portainer afin d’y stocker les données du Docker du même nom
[email protected]:~$ mkdir data
Puis on lance le Docker de Portainer, sur le port 9000 et en lui indiquant qu’il doit mettre les données dans /home/portainer/data. Avec une option pour le relancer à chaque reboot de Docker. Attention les — sont des – – sans espace, mon rendu code foire un peu dans certains navigateurs
docker run -d -p 9000:9000 --restart always --name portainer -v /home/portainer/data:/data -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
Et tout s’installe puis se lance
[email protected]:~$ docker run -d -p 9000:9000 --restart always --name portainer -v /home/portainer/data:/data -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer Unable to find image 'portainer/portainer:latest' locally latest: Pulling from portainer/portainer d1e017099d17: Pull complete f96966278ba2: Pull complete Digest: sha256:261d02375566fd24f3fc0fb358bb5e4c394d82b3e44efb77e1609dd01c3d4369 Status: Downloaded newer image for portainer/portainer:latest 5d7e0d2639c2978f7dd08f20b4b13d9bb5b9860b5e129988a3cae006f1789511
Et pour s’assurer que Docker sera relancé en cas de reboot (faites ça en root ou sudo)
sudo systemctl enable docker
Après 1 à 2 minutes il suffit de vous rendre sur IP:9000 pour accéder à son interface. Créez votre super mot de passe de la mort qui tue et comme nous sommes dans le cas d’un Docker local, il faut donc sélectionner Local.
Si vous avez un nom de domaine affecté à cette machine rendez-vous dans Endpoints / Local et entrez le domaine. De cette manière tous vos Dockers auront un accès domaine:port au lieu de IP:port. C’est juste esthétique mais c’est plus sympa :)
Je vous laisse découvrir l’interface qui est plus qu’intuitive. Ce qui va nous intéresser dans ce rapide tutoriel c’est uniquement l’onglet Containers.
Je dois déplacer Docker, du moins son dossier de stockage par défaut, étant donné que je l’ai installé sur un serveur ProxMox dont le / ne fait que 10Go, l’espace dédié au stockage étant attribué à /var/lib/vz.
Avec docker info
on trouve notamment l’emplacement actuel du dossier de travail de Docker
[email protected]:~$ docker info [...] Docker Root Dir: /var/lib/docker [...]
Et je veux donc changer ça en /var/lib/vz/Docker. Pour ça il y a 2 méthodes : la crados qui consiste à modifier le fichier de (service) lancement de Docker par Systemctl (avec risque devoir recommencer à chaque update de Docker) ; la propre en ajoutant un fichier de conf qui sera lancé à chaque reboot de Docker. Je prends la 2nde :
Créer le fichier/etc/docker/daemon.json et y indiquer son « nouveau » dossier root pour Docker.
sudo nano /etc/docker/daemon.json # Contenu { "graph": "/var/lib/vz/Docker" }
Relancer le daemon Docker (ou rebooter) et docker info
nous indique que la modif est prise en compte
[email protected]:~$ sudo systemctl restart docker [email protected]:~$ docker info [...] Docker Root Dir: /var/lib/vz/Docker [...]
Dans un cadre d’utilisation « simple » le mieux est encore de se rendre sur DockerHub et d’y chercher des containers selon vos besoins. Les Stars désignent la popularité (votée) des dits containers et les Pulls sont le nombre de fois où ils ont été téléchargés/lancés. C’est donc en général révélateur de la qualité d’un container.
Là j’ai besoin de ruTorrent. 2 se détachent du lot lors de ma recherche. Le 1er est celui de Linuxserver.io (bons containers et fiables) mais je vais prendre le 2nd (diameter) vu qu’il propose des outils de sus de rTorrent/ruTorrent.
Pour l’utiliser il va falloir dire à Portainer quel container chercher/ajouter. Il faut alors copier le nom affiché sur DockerHub (en haut à gauche) : diameter/rtorrent-rutorrent
Puis on l’ajoute dans l’onglet Containers / Add container
Vient ensuite le moment de la pseudo-configuration du container. Dans cet exemple : ports de communication à ouvrir, dossier de stockage des fichiers à monter, fichier de configuration de rTorrent à remplacer et un reboot automatique du container en cas de reboot de Docker.
Tout service Web a besoin de communiquer et/ou d’être accessible. Avec Docker il faut donc ouvrir des ports (et les rediriger le cas échéant) pour chaque container. Portainer permet de le faire de manière automatique (Publish all exposed ports) mais je conseille de ne pas utiliser cette solution sous peine de faire de votre serveur hôte un gruyère… Préférez créer vous-mêmes les redirections nécessaires à chaque container via l’option Map additional port.
Ça sous-entend que vous savez quels ports vous devez ouvrir/rediriger. Rien de compliqué, si la personne qui a fait ce Docker est à 99.99% normale, il suffit de lire les informations sur la source de votre container. Dans ce cas de ruTorrent ce sera ici, section Exposed :
-
Web UI ports: 80 and 443 (can be remapped in ‘docker run’) => je dois donc rediriger le port (TCP) 80 du container vers un port de mon serveur hôte (ou port 443 pour du https)
-
DHT UDP port: 49160 (can be remapped) => m’en tape, je ne fais pas d’UDP
-
Incoming connections port: 49161 (can be remapped) => je dois donc rediriger le port TCP 49161 vers un port de mon serveur hôte
Chacun son organisation au niveau des ports, par habitude le 1er container sera toujours en 8081, le 2nd en 8020 etc. Quant au port de ruTorrent (enfin rTorrent plutôt) je n’utilise pas de plage et n’en met qu’un seul : 52735. Prenez ce que vous voulez du moment que c’est > 50000 (moins de filtrage via les FAI). Voici ce que ça donne chez moi
Un des principes de Docker est d’être non persistent. C’est-à-dire que votre container peut être effacé/MàJ quand vous le voulez. Ce qui implique donc qu’il ne contienne aucune donnée « persistante » : documents personnels, fichiers de configurations personnalisés, fichiers de type BitTorrent/Usenet etc. Il convient donc de monter dans votre container Docker un stockage local. Ce stockage pouvant être une partition, un disque USB/SATA/whatever, un montage NFS local ou ce que vous voulez, du moment que c’est pas « dans » le container.
Encore une fois, pour savoir « comment » le monter (comment faire piger à Docker que /home/Michel sera le dossier où il doit stocker) il faut se référer à la doc du container. Dans ce cas de ruTorrent ce sera ici, section Exposed :
-
Downloads volume: /downloads
-
rtorrent scratch files (.rtorrent/{watch|session} will be created automatically): /downloads
-
autodl-irssi config files are created automatically: /downloads/.autodl
-
external rtorrent config (.rtorrent/.rtorrent.rc): /downloads
-
external ruTorrent ui config (config will be created automatically): /downloads/.rutorrent
-
external nginx and rtorrent logs: /downloads/.log/
Ici on voit que tout est dans /download. /download étant dans le container Docker il faut qu’on indique à Portainer de monter ce dossier /download localement (sur le serveur hôte). Je veux que ruTorrent télécharge dans /home/dlbot/torrents
Sélectionnez Bind et Writable.
Fichier de configuration externe
Un peu sur le même principe que le stockage des fichiers, j’utilise quasi toujours le même fichier de configuration pour rTorrent et je souhaite aussi l’utiliser ici. Comme pour le reste, nous voyons comment procéder ici, section Exposed :
-
external rtorrent config (.rtorrent/.rtorrent.rc): /downloads
Il convient donc d’aller éditer/recréer le .rtorrent.rc qui sera dans /downloads/.rtorrent sur le container DONC dans /home/dlbot/torrents/.rtorrent sur le serveur hôte.
Clairement cette étape peut être zappée pour la plupart des utilisateurs. Je suis juste un peu psychorigide quant au tri des fichiers et je préfère sauvegarder cette config si je dois retirer ce Docker :p
Histoire d’être tranquille vous pouvez configurer vos containers pour se relancer automatiquement en cas de reboot de Docker.
Vous pouvez aussi limiter les ressources de chaque container. Pratique si vous partagez un serveur avec plusieurs personnes et que vous avez chacun votre container ruTorrent (ou Emby/Plex qui bouffe pas mal de CPU/RAM). Je n’ai pas de conseil sur l’optimisation des ressources, c’est à tester. De toute manière si vous voulez modifier votre configuration d’un container via Portainer il suffit d’aller l’éditer et de le redéployer. Cette action effacera le container actuel, d’où l’intérêt de sauvegarder fichiers/configs localement.
Vous pouvez également ajouter des paramètres au lancent d’un container, via l’onglet Env. Par exemple la claimkey de Plex, dans ce cas vous ajoutez (name) PLEX_CLAIM et (value) la_clé :)
Joli travail !!! Merci à toi et aussi ton aide.
Merci :)
Au final, je reviens vers vous car je galère pour comprendre quelques trucs. Exemple pour bitnami/phpmyadmin, dans mon docker-compose j’ai :
depends_on:
– mariadb
Du coup, comment faire sur Portainer ? Vous pouvez sans souci me contacter via mon mail.
Bonjour, C’est la directive –link de Docker run […]. Je ne pense pas que ça puisse se retranscrire sous Portainer. Il suffit dans ce cas de simplement lancer le docker à la main, en partant du principe que le container SQL se nomme mariadb, ça donnerait un truc de ce genre : docker run -d --name phpmyadmin --restart always --link… Lire la suite »
Génial et merci à toi, Dommage que ce point n’y soit pas dans portainer… je me conserve précieusement cette ligne qui m’a fait bien avancer. Place à la suite maintenant.
Re,
Sur une ancienne version de portainer que j’avais, il y avait LinuxServer.io quand je cliquais dans App Templates. Une idée ?
Je ne sais pas, je ne m’en souviens pas. Autant les prendre sur Dockerhub, non ?
Salut @Aerya merci pour le tuto, j’ai une petite question je sais que tu aime bien Syncthing et j’arrive pas à le configurer avec portainer j’arrive pas a lui donner les droits pour /home/dlbot/torrents (ex) merci d’avance
Salut, tu as 2 solutions :
– (propre) lancer les Dockers avec le user auquel appartiennent les fichiers dans /home/USER/données
– (crados) sudo chmod -R 777 /home/USER/données
Comment tu lance les dockers avec Portainer avec un user particulier? car si j’ai bien suivis, on lance Portainer avec le user Portainer dans ton Tuto mais après dans Portainer tu peux utiliser administrateur ou user mais pas avec les user qui sont sur ton serveur si je me trompe pas et si c’est compréhensible
En effet, j’avais zappé qu’on parlait de Portainer. Donc dans ton cas précis le plus simple est de faire un chmod -R 777 sur le dossier des données à partager entre containers.
Salut Aerya :) Dis j’aurais une question, si on spécifier le home de l’user crée est ce que ça éviterai d’éditer la conf de docker ? Par ex : adduser –disabled-login –gecos ‘Docker App’ portainer –home /var/lib/vz/portainer portainer Édit: Je viens de relire et non, puisque si je comprend bien ce serons les data de docker et non ceux de… Lire la suite »
Oui tu peux aussi le faire comme ça. Je me sers de ce user pour y stocker mes données Docker ensuite, disons que ça dépend des goûts de chacun ;)
je déterre un peu le sujet mais du coup ton installation de docker elle est effectué dans une VM sur ton proxmox ou directement sur l’hôte ?
Salut, c’est installé en parallèle de Proxmox. Ça me permet d’avoir un système plus souple/complet.
Salut Aerya, j’avais déjà lu ton super article il y a un bout de temps et cela m’avait fait découvrir un peu docker et surtout portainer. Aujourd’hui je me sert de ton tuto au complet car je viens de changer de serveur. Je récupère la dernière version du container, j’accède à l’interface et autre. J’ajoute un torrent et la nada.… Lire la suite »
Salut, c’est le container rTorrent qui semble déconner, lequel utilises-tu ?
je confirme! merci de l’aide avec celui de xataz aucun soucis!
Bonjour,
Merci pour cet article, facile a suivre.
Par contre je voudrais que mes containers utilisent le DHCP (ou IP statique) de mon réseau local.
J ai plusieurs PC qui doivent accéder a mon container, mais avec le bridge par défaut je ne peux pas communiquer entre mes réseaux (192.168.1.0 et 172.17.0.0)
Est-ce possible ?
Merci
bonjour,
merci pour le
tuto
attention petit détail
Docker n’aime pas le caractère #
ce n’est pas détecté en « commentaire » …
donc bien enlever la partie #contenu pour que ça marche
Créer le fichier/etc/docker/daemon.json et y indiquer son “nouveau” dossier root pour Docker.
sudo nano /etc/docker/daemon.json
# Contenu
DUUUUUDDDEEEEE merci je cherchais l’info sur les ports partout et finalement tous est ok grave a toi alors merci beaucoup
Content d’aider :)