NAS Synology – Prise en main de Container Manager pour créer des conteneurs Docker
Sommaire
I. Présentation
Vous souhaitez apprendre à utiliser l'application "Container Manager" disponible sur les NAS Synology ? Vous êtes au bon endroit, car dans ce tutoriel, nous allons effectuer un tour d'horizon de cette application permettant d'exécuter des containers Docker !
II. Synology : qu'est-ce que Container Manager ?
Le centre des paquets du système d'exploitation DSM contient une application nommée "Container Manager". Depuis environ un an et suite à la mise en ligne de DSM 7.2, il s'agit du nouveau de l'application "Docker". Son objectif est de vous permettre de créer et d'exécuter des containers Docker sur votre NAS Synology, ce qui ouvre de nombreuses possibilités, tout en consommant peu de ressources.
Vous pouvez créer vos propres containers à partir du référentiel d'images Docker où il y a des milliers d'images différentes. Ainsi, vous pouvez exécuter sur votre NAS diverses applications, au sein de containers isolés du système DSM. D'ailleurs, nous avions déjà mis en ligne des tutoriels pour déployer certaines applications :
- Déployer Vaultwarden sur un NAS Synology
- Déployer FreshRSS sur un NAS Synology
- Déployer Stirling PDF sur un NAS Synology
- Déployer Homer sur un NAS Synology
- Déployer iVentoy (PXE) sur un NAS Synology
Avant de commencer, vérifiez si votre modèle de NAS Synology est compatible avec le paquet "Container Manager" en consultant cette page :
III. Tour d'horizon de l'interface Container Manager
A. Installation de Container Manager
La première étape consiste à installer le paquet "Container Manager" car il n'est pas préinstallé sur DSM. Vous pourrez le trouver dans le "Centre de paquets".
Il suffit de cliquer sur "Tous les paquets", de rechercher le terme "container" pour localiser l'application "Container Manager", puis de cliquer sur le bouton "Installer".
Ensuite, l'application "Container Manager" sera accessible dans le menu principal de DSM.
B. Découverte de l'interface
L'interface de "Container Manager" contient un ensemble de sections accessibles dans un menu vertical présent sur la gauche. Lorsque l'application est lancée, nous arrivons dans la "Vue d'ensemble", qui est un tableau de bord proposant un aperçu global sur l'état de vos containers et les ressources consommées.
Pour le reste, voici à quoi correspondent les autres entrées présentes dans le menu latéral :
- Projet
La section "Projet" est directement liée à l'utilisation de Docker Compose. Cet outil va faciliter le déploiement d'un nouveau conteneur grâce à un fichier de configuration au format YAML.
Autrement dit, vous importez le fichier "docker-compose.yml" dans Container Manager et vous validez pour lancer le téléchargement de l'image du conteneur, ainsi que la création et la configuration du conteneur en lui-même. Ceci vous évite de créer le conteneur pas-à-pas en suivant l'assistant de Synology. Désormais, j'ai pris l'habitude d'utiliser cette méthode pour déployer une nouvelle application conteneurisée sur un NAS Synology.
Il est important de préciser que cela améliore la gestion et la portabilité des conteneurs Docker. En effet, ce fichier de configuration contient toutes les informations relatives à l'exécution de ce conteneur : version de Docker nécessaire, image, mode du réseau, stockage, etc. De plus, un projet peut correspondre à une application multi-conteneurs.
- Conteneur
La section "Conteneur" contient la liste de tous les conteneurs présents sur votre NAS Synology, ainsi que leur statut. C'est également ici que vous pouvez créer un nouveau conteneur à l'aide de l'assistant graphique de DSM, obtenir des détails sur un conteneur, modifier sa configuration, etc....
En passant par la section "Conteneur", vous effectuez la création manuelle d'un conteneur en faisant abstraction sur le fait de pouvoir utiliser Docker Compose (via la section "Projet"). Avant que l'application Docker devienne Container Manager, c'était la seule option.
- Image
La section "Image" contient la liste de toutes les images Docker présentes sur votre NAS Synology. À chaque fois, plusieurs informations sont indiquées : nom de l'image, la version, la taille de l'image et l'heure de création de l'image Docker (ce qui ne correspond pas à la date et l'heure à laquelle vous avez effectué le téléchargement).
La première colonne indique le statut : quand c'est bleu, c'est que l'image est utilisée, c'est-à-dire associée à un conteneur, alors que quand c'est blanc, elle n'est pas utilisée.
- Registre
La section "Registre" donne accès à la liste des images que vous pouvez télécharger sur votre NAS et exploiter ensuite dans des conteneurs Docker. Par défaut, Container Manager s'appuie sur le dépôt officiel "Docker Hub", mais en cliquant sur le bouton "Paramètres", vous pouvez ajouter des dépôts privés. Le nombre d'étoiles indique la popularité de l'image, c'est donc un indicateur important.
- Réseau
La section "Réseau", comme son nom l'indique, donne accès à la gestion du réseau pour les conteneurs. Par défaut, Docker sur Synology est accompagné par deux réseaux : "host" et "bridge", mais il est possible d'en créer d'autres.
En mode "bridge", les conteneurs peuvent communiquer avec le réseau local sur lequel est connecté le NAS tout en étant isolé. Tous les conteneurs connectés à un même réseau bridge peuvent également communiquer entre eux. Docker s'occupe de faire le pont entre le réseau du conteneur et le réseau local. Il s'agit du type de réseau par défaut.
Un conteneur connecté en mode "host" partage directement le réseau de l'hôte Docker, c'est-à-dire du NAS. Le conteneur utilise l'adresse IP de l'hôte directement. Il n'y a pas un réseau virtuel permettant d'interconnecter plusieurs conteneurs comme avec le mode "bridge". En complément, nous avons le pilote "macvlan" qui permet au conteneur d'avoir son adresse MAC ainsi que son adresse IP, et ainsi d'être visible sur le réseau local comme un hôte à part entière (cette configuration est utile dans certains cas, notamment si le conteneur hébergeur un serveur PXE).
- Journal
La section "Journal" contient l'historique des actions effectuées via l'interface de "Container Manager" : téléchargement d'une image, création d'un conteneur, création d'un projet, démarrage ou arrêt d'un conteneur, etc... Il est possible de filtrer le journal par sévérité (Infos, avertissements, erreurs).
IV. La gestion des données des conteneurs Docker
Chaque conteneur déployé a besoin de pouvoir stocker ses données. Je vous recommande de créer un sous-dossier par conteneur dans le répertoire "docker" créé par Container Manager. Par exemple, si vous souhaitez déployer "Homer" dans un conteneur, vous créez un répertoire "homer" sous "docker" et dans la configuration du conteneur Homer, il faudra pointer vers ce répertoire.
Voici un exemple :
Ceci vous permettra d'organiser données associées à vos conteneurs Docker déployés sur votre NAS Synology. Dans le répertoire du conteneur, il pourra y avoir d'autres dossiers (data, config, etc...) en fonction des besoins du conteneur en lui-même.
V. Créer un utilisateur dédié pour exécuter les conteneurs Docker
Lors de la configuration d'un conteneur Docker, notamment à partir d'une configuration Docker Compose, il est très fréquent de devoir préciser avec quel utilisateur nous souhaitons exécuter le conteneur.
Pour des raisons de sécurité, évitez d'exécuter le conteneur avec un compte utilisateur qui est administrateur du NAS. À la place, utilisez un compte utilisateur dédié pour Docker, par exemple, nommé "docker" et qui aura des permissions de lecture et écriture sur le répertoire "docker" et son contenu. C'est tout. Il n'aura pas accès aux autres applications, ni même à l'interface de DSM.
Remarque 1 : dans cet exemple, le compte "docker" sera membre du groupe "users" présent par défaut et nous lui refuserons l'accès à toutes les applications de façon explicite. Vous pouvez aussi créer un groupe "docker" et configurer les permissions sur le groupe, puis ajouter l'utilisateur "docker" uniquement à ce groupe à la place de "users".
Remarque 2 : toutes les images et les scénarios ne permettant pas de spécifier l'utilisateur avec lequel vous souhaitez exécuter le conteneur. En effet, cela dépend des privilèges requis par le conteneur.
Pour créer ce nouveau compte utilisateur, suivez la procédure suivante :
1 - Cliquez sur "Panneau de configuration" puis "Utilisateur et groupe".
2 - Cliquez sur le bouton "Créer" à partir de l'onglet "Utilisateur".
3 - Indiquez un nom, par exemple "docker", ainsi qu'une description et un mot de passe (que vous stockez dans votre coffre-fort de mots de passe). Cochez également l'option "Ne pas autoriser l'utilisateur à changer le mot de passe du compte".
4 - Ajoutez l'utilisateur au groupe "users" (ou à votre groupe "docker" si vous l'avez créé en amont).
5 - Attribuer les permissions de lecture et écriture sur le dossier partagé "docker" à cet utilisateur.
6 - Passez l'étape correspondante à la gestion du quota.
7 - Refusez l'accès, de façon explicite, à toutes les applications. Cet utilisateur n'a aucune raison d'avoir accès à l'interface DSM ou à d'autres fonctions.
8 - Poursuivez jusqu'à la fin pour créer l'utilisateur.
Voilà, le compte utilisateur pour Docker a été créé ! Il ne restera plus qu'à récupérer l'UID et le GID pour les spécifier dans un conteneur qui doit être exécuté avec ce compte. Pour cela, référez-vous à ce tutoriel :
Voici un exemple pour le mappage du répertoire de données dans un conteneur, ainsi que de l'utilisation de l'utilisateur "docker" pour exécuter un conteneur Docker :
VI. Déployer un premier conteneur
Pour que vous puissiez faire vos premiers pas avec le déploiement d'un conteneur Docker sur un NAS Synology, nous allons faire simple et déployer un conteneur basé sur l'image "httpd". Ceci correspond à un serveur web Apache2.
Nous allons créer un répertoire nommé "httpd" dans "docker". Puis, dans le répertoire "httpd", nous allons créer le répertoire "websites" qui sera destiné à stocker les données de notre site web statique. Notre conteneur sera basé sur l'image "httpd" visible sur l'image ci-dessous.
Désormais, nous allons pouvoir créer ce nouveau conteneur Apache2. Suivez les étapes suivantes :
1 - À partir de l'interface "Container Manager", cliquez sur "Projet" puis sur le bouton "Créer".
2 - Nommez ce projet "apache2_httpd" puis indiquez "/docker/httpd" comme chemin.
Vous devez également indiquer le contenu de votre fichier "docker-compose.yml". Pour déployer un serveur Apache à partir de l'image la plus récente ("image: httpd:latest") dans un conteneur nommé "httpd-website", voici le code à utiliser :
version: '3.9'
services:
apache:
image: httpd:latest
container_name: httpd-website
ports:
- '9090:80'
volumes:
- /volume1/docker/httpd/websites:/usr/local/apache2/htdocs
Il y a également deux directives pour effectuer le mappage du port et du stockage :
- Le conteneur sera accessible sur le port 9090 en externe, tandis que le port interne est 80 (http).
ports:
- '9090:80'
- Le répertoire "/usr/local/apache2/htdocs" du conteneur et correspondant à la racine du serveur Web, sera mappé avec le répertoire "/volume1/docker/httpd/websites" du NAS.
volumes:
- /volume1/docker/httpd/websites:/usr/local/apache2/htdocs
Ce qui donne :
Remarque : pour obtenir le fichier de configuration Docker Compose d'une application, consultez la documentation officielle de l'application en question. En général, il y a des instructions puisque ce type de configuration tend à se démocratiser.
Vous pouvez continuer jusqu'à la fin et valider.
Container Manager va télécharger l'image associée à notre projet et construire le conteneur associé.
Une fois que ce sera terminé, le conteneur Apache2 sera actif et accessible. Le statut global du projet est visible dans "Projet", tandis que le statut du conteneur "httpd-website" est visible dans "Conteneur". Cette section permet d'afficher le statut par conteneur, car un projet peut regrouper plusieurs conteneurs. Dans la section "Image", celle correspondante au conteneur Apache2 a bien été téléchargée.
À partir de "Projet", si vous cliquez sur le nom du projet, vous pouvez obtenir des informations très intéressantes :
- Conteneurs : la liste des conteneurs associés à ce projet avec le statut correspondant
- Statistiques : les ressources consommées (CPU, RAM, réseau)
- Configurations YAML : le code du fichier docker-compose.yml de ce projet. Vous pouvez l'éditer quand le projet (et donc les conteneurs) est arrêté.
- Paramètres : publier ce conteneur via l'application Web Station de DSM. Pour avoir des paramètres avancés, il faut cliquer sur le conteneur via le menu "Conteneur", sans passer par "Projet".
Désormais, nous allons tenter d'accéder à la page d'accueil de notre serveur web Apache2.
À partir d'un navigateur, il est possible d'accéder à notre serveur web Apache2. Il suffit de saisir l'adresse IP du NAS, suivie par le numéro de port 9090. Actuellement, il n'y a aucun fichier, donc la page web affiche la directive "Index of /".
Dans le répertoire "websites" de votre NAS, vous pouvez déposer un ou plusieurs fichiers.
Par exemple, voici un fichier nommé "index.html" avec le code suivant :
<html>
<body>
<h1>Demo IT-Connect</h1>
</body>
</html>
Le fichier "index.html" a été copié dans le répertoire "/docker/httpd/websites". Désormais la page retournée est différente :
Notre conteneur Apache2 est opérationnel !
VII. Conclusion
J'espère que cet article d'introduction à Container Manager vous permettra de bien prendre en main la gestion des conteneurs Docker ! C'est une fonctionnalité très utile du système DSM et qui ouvre la porte à l'hébergement de nombreuses applications sur votre NAS ! Il y a beaucoup à dire et chaque conteneur peut avoir ses particularités, donc il y aura probablement des articles complémentaires à celui-ci, ainsi que des articles spécifiques pour déployer diverses applications.
N'hésitez pas à commenter cet article si vous avez des questions ou des idées d'amélioration.
Bonjour. Malheureusement je possède un NAS Synology qui n’a pas reçu la mise à jour vers la 7.2 🙁
Hello Peter,
Arf… Donc pas de Container Manager… Mais tu as quand même l’application Docker sans la partie « Projet ».
Tu as quel modèle de NAS ?
J’ai le DS216Se
Hello
Je suis en 7.2.1 sur deux syno mais pas de package docker de dispo sur les deux
Normal ? Un DS218 et un 418
Merwan
Hello Merwan,
Malheureusement, ce paquet ne semble pas compatible avec tes modèles de NAS, seulement avec le DS218+ et non le DS218 standard. 🙁