Passer au contenu principal

Prise en main de Container Manager

Dans ce tutoriel, nous allons effectuer un tour d'horizon de cette application permettant d'exécuter des containers Docker.

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.

Avant de commencer, vérifiez si votre modèle de NAS Synology est compatible avec le paquet "Container Manager" en consultant cette page :

Tour d'horizon de l'interface Container Manager

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".

image.png

Ensuite, l'application "Container Manager" sera accessible dans le menu principal de DSM.

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.

image.png

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.

image.png

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.png

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.

image.png

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.

image.png

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).

image.png

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).

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 :

image.png

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.

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.

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".

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 :

- 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".

image.png

- Ajoutez l'utilisateur au groupe "users" (ou à votre groupe "docker" si vous l'avez créé en amont).

image.png

- Attribuer les permissions de lecture et écriture sur le dossier partagé "docker" à cet utilisateur.

image.png

- 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.

image.png

- Poursuivez jusqu'à la fin pour créer l'utilisateur.

image.png

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.

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 :

image.png

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.

image.png

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".

- Nommez ce projet "apache2_httpd" puis indiquez "/docker/httpd" comme chemin.

image.png

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).
  • 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.

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é.

image.png

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.

image.png

À 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".

image.png

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 /".

image.png

Dans le répertoire "websites" de votre NAS, vous pouvez déposer un ou plusieurs fichiers.

image.png

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 :

image.png

Notre conteneur Apache2 est opérationnel !