Strak.ch

[Tech] Premiers pas avec Docker et Portainer sur Qnap

Salut les amis, j'espère que vous vous portez bien, malgré les circonstances, que vous avez bien assez de PQ, de pâtes et de bières, et que vous avez comme moi la chance de pouvoir faire du télétravail.

Une fois n'est pas coutume, on commence par une parenthèse: j'ai nettoyé les articles, renommé la catégorie "News" en "Actu", plus parlante je trouve, et j'ai créé la catégorie "Tech", c'est mieux que de l'appeler "Divers" hein, et qui devrait logiquement accueillir la majeure partie des articles. Voilà, ça, c'est pour ce qui concerne mon organisation perso, on peut passer au vif du sujet ! :)

Docker c'est quoi ?

Docker... tout le monde en parle, encore aujourd'hui, pourtant le produit ne date pas d'hier. Bizarrement, je n'ai pas encore rencontré quelqu'un qui ose me dire qu'il maitrise le sujet, peut-être parce que mes contacts sont plus orientés Sysadmin et moins DevOps, je ne sais pas. Toujours est-il qu'à peu près tout le monde a compris le principe de conteneurisation, et surtout que c'est très différent de la virtualisation, certes plus abstrait mais aussi plus puissant, suivant le besoin. Pour ma part, je suis TRÈS loin de le maitriser, je ne l'ai qu'effleuré et je ne l'utilise que pour mes petits besoins à la maison. J'ai quand même découvert 2-3 trucs intéressants que je voulais partager avec vous.

Portainer, la bonne découverte

D'abord, je n'ai officiellement pas encore installé une "vraie" instance Docker. À la base, je me suis contenté d'installer le composant Container Station sur mon Qnap, afin de pouvoir profiter des conteneurs dans une interface simplifiée et sans me prendre trop la tête. Mais pourquoi faire ? Pour vous la faire courte, j'avais une instance de Pi-Hole qui tournait dans une VM sous Debian, et comme le geek ne se satisfait jamais de ce qu'il a, bien que tout fonctionnait, je me suis mis en tête de tester Adguard Home, qui justifierait d'ailleurs un article. Et que, pour en rajouter une couche (Docker, les couches, vous l'avez ? Bon.), j'allais mettre ça dans un conteneur tant qu'à faire. Tout a bien marché, j'ai mis en place Adguard, et je l'ai oublié. Jusqu'au jour où je me suis intéressé aux mises à jour...

J'ai jeté un œil au Github, et j'ai constaté avec effarement que j'avais pas mal de versions de retard. Ni une ni deux, j'ai commencé à lire de la doc, le problème majeur étant que Container Station est assez peu ergonomique pour le moment, et que je n'ai pas encore trouvé une documentation officielle des commandes Docker supportées par Qnap. Je suis donc tombé sur cet excellent article, et j'ai installé Portainer. Mais c'est quoi ? Et bien Portainer, tenez-vous bien, va vous offrir une interface graphique pour gérer Docker, dans mon cas, c'est une alternative à l'interface austère de Container Station. C'est donc un conteneur qui va gérer tous les autres conteneurs ! Incroyable.

Du coup, je vous donne ma super astuce d'apprenti sorcier pour mettre à jour un conteneur depuis Portainer, il suffit de cliquer sur le gros bouton "Recreate". Les paramètres sont conservés, et la dernière version est poussée comme par enchantement. Incroyable je vous dis ! Mon Adguard Home est donc très à jour et je profite des dernières nouveautés et des hotfix. Comme je suis un angoissé, j'ai quand même récupéré le fichier qui contient toute ma config avant de faire ça, mais je n'en ai pas eu besoin heureusement.

Et maintenant on fait quoi ?

Tout n'est cependant pas parfait, et je suis actuellement confronté à deux petits problèmes que j'espère bien résoudre. Si vous avez une piste, ou mieux une solution, je suis bien entendu preneur car je le répète, je ne suis pas du tout expert en la matière !

Problème: mettre à jour Portainer

Comment diable je fais pour mettre à jour Portainer lui-même ? Dans ma compréhension, il faudrait pousser le conteneur à jour, supprimer l'ancien et le redémarrer avec les paramètres qui vont bien. Mais si Portainer est arrêté, comment pourrait-il lancer une autre instance de lui-même ? Il faudrait passer par Container Station ? En SSH sur le Qnap ? C'est un peu #brainfuck.

Problème: installer "proprement" qbittorrent

Du coup, j'essaie de tout *dockeriser *vous vous en doutez ! Je me suis basé sur cette vidéo pour déployer une instance de qbittorrent, que vous aviez pu découvrir dans cet article et que j’utilise toujours d'ailleurs. Alors ça marche, il se lance bien, le problème n'est pas là: j'ai des erreurs dans mes logs qui me disent comme quoi l'IP est déjà bindée, ce qui me semble logique, puisque j'ai volontairement décidé de déployer qbittorrent dans le réseau "Host", ce qui veut dire qu'il va utiliser la même IP que mon Qnap et donc être capable d'aller récupérer des fichiers et les écrire dans les bons répertoires. Comme l'instance de qbittorrent que j'utilisais jusqu'à maintenant en fait... du coup, je ne sais pas encore si c'est un bug, une erreur de déploiement ou simplement que mon architecture ne peut pas répondre à ce scénario. Il faut donc que je creuse et je vous tiendrai au courant. Ou pas.

Edit 29.03.20: qbittorrent, résolu

Après quelques essais, j'ai réussi à faire fonctionner qbittorrent comme je l'entends. Notez que j'ai finalement créé le conteneur depuis Container Station, je n'ai pas essayé de reproduire depuis Portainer mais je suppose que ça devrait fonctionner.

[~] # id dockuser
uid=500(dockuser) gid=100(everyone) groups=100(everyone)

Chez moi, avant déploiement, ça donne ceci:

Après debug, j'ai réalisé qu'il fallait au moins 30% de CPU à qbitorrent pour utiliser le 100% de ma ligne internet, à noter.

Le mot de la fin

Voilà, c'est tout pour cette très succincte introduction à Docker. Vous l'avez compris, je suis en plein dedans, je vais sûrement comprendre pas mal de trucs entretemps, ce qui me donnera peut-être l'occasion d'écrire un autre article. Si vous avez des questions spécifiques à Qnap, n'hésitez pas, les commentaires sont là pour ça. À plus !