[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.
– J’ai monté un volume depuis un hôte au moment de la création, pour mapper le répertoire par défaut /downloads de qbittorrent à mon répertoire Download partagé sur mon Qnap.
– Point le plus important, j’ai passé les paramètres PUID et PGID dans l’onglet environnement, ce qui est nécessaire selon la doc quand on précise des volumes. En gros, il faut que l’user utilisé (soit un user existant, soit un nouvel user) ait les droits d’écriture dans le dossier spécifié. Pour trouver les ID à utiliser, on se connecte en SSH sur le Qnap et on tape la commande suivante (dockeruser est ici un exemple à adapter chez vous) :

[~] # 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 !

4 thoughts to “[Tech] Premiers pas avec Docker et Portainer sur Qnap”

  1. salut !
    Très intéressant comme article !
    J’ai globalement les mêmes problèmes que toi, pas de doc pour container station donc tout les Tuto suivis pour docker sont difficile à adapter à notre Qnap à moins de passer en CLI …
    Bref si tu as du nouveau j’ai hâte de lire la suite.
    Bonne journée

    1. Salut,
      Merci pour ton retour !
      C’est vrai, il faut un peu tâtonner, mais on finit par y arriver ! :)
      Que fais-tu tourner de beau dans Container Station, si ce n’est pas indiscret ?
      A+

      1. Salut,
        J’essaie désespérément de faire tourner un Serveur Node.JS Mais ce n’est pas encore 100% gagné.
        Car comme tu le dis, je tâtonne j’essai, je recommence …
        Bref c’est un peu chiant qu’il n’y ai pas une vrai documentation ou du moins des modules ou l’on puisse saisir les meme éléments qu’en CLI notamment pour les builds…

        1. Beau projet !
          Je suis d’accord, c’est chiant. Une connaissance se casse actuellement les dents avec Pi-Hole mais sur Synology, et apparemment niveau documentation c’est aussi le désert… bon, au moins, ça permet de monter en compétence dans le debugging ! :)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *