đ» TP : Montage de rĂ©pertoires/fichiers
1. Présentation et objectifs
L’objectif de ce TP est d’apprendre Ă utiliser le montage de rĂ©pertoire/fichier avec Podman pour plus facilement gĂ©rer les donnĂ©es de logiciels exĂ©cutĂ©s dans des conteneurs.
| Comme pour le TP prĂ©cĂ©dent, lorsque le sujet de TP vous propose d’exĂ©cuter une commande, il est demandĂ© que vous arriviez Ă comprendre tout ce que comporte cette commande. Prenez le temps de bien lire et dĂ©cortiquer chaque commande qui vous est proposĂ©e, et n’hĂ©sitez pas Ă poser des questions. |
2. Connexion au serveur de déploiement
Comme pour le TP prĂ©cĂ©dent, toute la suite du TP devra ĂȘtre effectuĂ©e sur l’environnement de dĂ©ploiement. Vous pouvez donc commencer par ouvrir un terminal et ouvrir une session SSH Ă distance sur ce dernier, comme vous avez appris Ă le faire dans le đ» TP : DĂ©couverte de l’infrastructure et des outils.
Pour rappel, il est tout Ă fait possible d’ouvrir plusieurs terminaux en parallĂšle.
Vous pouvez ainsi, si nécessaire ouvrir plusieurs connexions vers le serveur de déploiement.
Cela peut ĂȘtre utile par exemple pour lancer un conteneur dans un premier terminal (avec run), et l’observer (avec ps ou logs) ou le manipuler (avec stop ou rm) depuis un second.
Vous pouvez également garder un autre terminal ouvert pour exécuter des commandes sur votre poste Linux.
|
3. Tutoriel : premiers montages dans un conteneur Ubuntu
3.1. Un premier montage de répertoire
Nous allons commencer ce TP de maniĂšre similaire au TP prĂ©cĂ©dent, en crĂ©ant un conteneur Ă partir d’une image Ubuntu. Cependant, cette fois-ci nous allons mettre en place un montage de rĂ©pertoire permettant d’Ă©changer facilement des donnĂ©es avec le conteneur.
Commençons par prĂ©parer un nouveau rĂ©pertoire dans votre rĂ©pertoire utilisateur au sein de l’environnement de dĂ©ploiement, et ajoutons un fichier appelĂ© mon_fichier dans ce rĂ©pertoire :
$ mkdir ~/tp-montage/tutoriel_1
$ echo "Ce fichier a été créé en dehors du conteneur" > ~/tp-montage/tutoriel_1/mon_fichier
Ensuite on crée le conteneur de maniÚre similaire à la derniÚre fois, mais en ajoutant cette fois-ci le montage :
$ cd ~
$ podman container run --name conteneur_avec_montage \
--tty \
--interactive \
--mount type=bind,source="./tp-montage/tutoriel_1",target="/repertoire_montage" \
docker.io/ubuntu:24.04
L’option --mount ici dĂ©clare trois choses :
-
type=binddéclare le type de montage, à savoir un montage de répertoire/fichier (le seul type de montage étudié dans ce cours), -
source="./tp-montage/tutoriel_1"dĂ©clare que nous souhaitons monter le rĂ©pertoire./tp-montage/tutoriel_1de l’environnement de dĂ©ploiement, -
target="/repertoire_montage"déclare que le point de montage au sein du conteneur sera le répertoire/repertoire_montage.
|
Faites trĂšs attention lors de vos montages de rĂ©pertoire : pensez comme montrĂ© ici Ă toujours prĂ©parer un nouveau rĂ©pertoire pour chacun de vos conteneurs ! Cela vous Ă©vite d’une part de mĂ©langer les donnĂ©es de vos diffĂ©rents dĂ©ploiements, et vous Ă©vite d’autre part de partager par erreur un rĂ©pertoire critique avec votre conteneur, ou bien entre diffĂ©rents conteneurs. Par exemple, il ne faut surtout pas monter l’intĂ©gralitĂ© de votre rĂ©pertoire utilisateur au sein de votre conteneur (en faisant par exemple |
Une fois le conteneur créé et démarré, on obtient comme la fois précédente un interpréteur de commande interactif. On peut alors regarder les répertoires disponibles à la racine du systÚme de fichiers :
# ls /
Parmi la liste des rĂ©pertoires on voit apparaĂźtre repertoire_montage, le point de montage choisi dans l’option --mount !
On peut se rendre dans ce répertoire et constater que notre fichier est bien présent, avec le bon contenu :
# cd /repertoire_montage
# ls
# cat ./mon_fichier
3.2. Deux rĂ©pertoires trĂšs trĂšs liĂ©s âïž
VĂ©rifions maintenant que le rĂ©pertoire /repertoire_montage du conteneur est bien liĂ© au rĂ©pertoire ~/tp-montage/tutoriel_1 de l’environnement de dĂ©ploiement.
Pour cela nous allons faire deux modifications dans ce répertoire depuis le conteneur :
-
Ăditez le fichier
~/tp-montage/tutoriel_1/mon_fichierpour y ajouter le texte de votre choix :[sur le conteneur]# nano ./mon_fichierLa commande nanon’est pas installĂ©e par dĂ©faut dans un environnement Ubuntu : vous devez d’abord l’installer ! Le paquetaptcorrespondant s’appelle simplementnano. -
Puis créez un nouveau fichier à cÎté de ce premier fichier :
[sur le conteneur]# echo "Ceci est un second fichier" > ./mon_second_fichier
Observons maintenant les consĂ©quences de ces changements. Ă l’aide d’un second terminal, rendez-vous dans le rĂ©pertoire montĂ© de l’environnement de dĂ©ploiement, et vĂ©rifiez son contenu ainsi que celui des deux fichiers :
$ cd ~/tp-montage/tutoriel_1
$ ls
$ cat ./mon_fichier
$ cat ./mon_second_fichier
Tous les changements effectuĂ©s dans le conteneur sont bien apparents dans l’environnement de dĂ©ploiement !
On pourrait Ă nouveau modifier le contenu du rĂ©pertoire ~/tp-montage/tutoriel_1 depuis l’environnement de dĂ©ploiement, constater que les changements apparaissent dans le rĂ©pertoire /repertoire_montage du conteneur, et ainsi de suiteâŠ
En rĂ©sumĂ© : on observe bien de chaque cĂŽtĂ© le mĂȘme rĂ©pertoire accessible depuis les deux environnements.
3.3. Un montage de fichier
Il est Ă©galement possible de faire un montage de fichier dans le conteneur. CrĂ©ons un fichier Ă monter dans l’environnement de dĂ©ploiement :
$ echo "Ce fichier va ĂȘtre montĂ© dans un conteneur" > ~/tp-montage/tutoriel_1/mon_troisiĂšme_fichier
Puis créons un second conteneur en déclarant un montage avec ce nouveau fichier :
$ cd ~
$ podman container run --name conteneur_avec_montage_2 \
--tty \
--interactive \
--mount type=bind,source="./tp-montage/tutoriel_1/mon_troisiĂšme_fichier",target="/root/fichier_dans_conteneur" \
docker.io/ubuntu:24.04
Une fois dans le conteneur, on peut vĂ©rifier que le fichier montĂ© est bien prĂ©sent Ă l’emplacement du point de montage, avec le bon contenu :
# cd /root
# ls
# cat ./fichier_dans_conteneur
Et normalement tout est bon !
Pour aller plus loin, on peut modifier ce fichier depuis le conteneur (par exemple Ă l’aide de nano), et constater que ce changement est bien visible au sein du fichier ~/tp-montage/tutoriel_1/mon_troisiĂšme_fichier de l’environnement de dĂ©ploiement.
4. Ménage
Avant de passer aux exercices suivant, pensez à supprimer les conteneurs que vous avez créé dans ce tutoriel !
5. Exercice : faciliter l’usage du conteneur Asciidoc avec un montage
5.1. ĂnoncĂ©
Dans cet exercice on se propose de reprendre l’exercice Asciidoc du TP prĂ©cĂ©dent, mais cette fois-ci sans exĂ©cuter la commande podman container cp : on souhaite cette fois-ci reposer sur un montage de rĂ©pertoire afin de passer des fichiers au conteneur, et afin de rĂ©cupĂ©rer les fichiers gĂ©nĂ©rĂ©s au sein du conteneur.
Commencez par relire l’Ă©noncĂ© (qui reste le mĂȘme pour cet exercice) avant de passer aux questions qui suivent.
5.2. Questions
-
Sur l’environnement de dĂ©ploiement, prĂ©parez un rĂ©pertoire vide que vous monterez dans le conteneur que vous allez crĂ©er.
-
PrĂ©parez et exĂ©cutez une commande pour crĂ©er un conteneur Alpine avec l’image de conteneur accessible par l’Ă©tiquette
3.22, et avec les options nécessaires pour :-
lui donner le nom
alpine_asciidoctor, -
permettre les interactions clavier avec le conteneur,
-
définir un montage de répertoire depuis le répertoire créé dans la question 1, vers un répertoire de votre choix au sein du conteneur.
-
-
Une fois dans le conteneur, exécutez les commandes nécessaires pour installer
asciidoctor. VĂ©rifiez que l’outil est bien installĂ© en l’exĂ©cutant avec l’option--version. -
Sur votre poste de travail, préparez un fichier
financiers.adoccontenant la recette de financiers montrée en exemple plus haut. -
Ă l’aide d’un second terminal, dĂ©placez le fichier
financiers.adocau sein du rĂ©pertoire que vous avez prĂ©parĂ© sur l’environnement de dĂ©ploiement. -
Dans votre conteneur, vérifiez que le fichier
financiers.adocest bien apparu dans votre point de montage, puis exécutezasciidoctorde maniÚre à convertir le fichier en HTML. Utilisezlspour vérifier que vous avez bien produit un fichierfinanciers.html. -
Ă l’aide d’un second terminal, vĂ©rifiez sur l’environnement de dĂ©ploiement que le fichier HTML produit est bien accessible dans le rĂ©pertoire qui a Ă©tĂ© montĂ© dans le conteneur.
-
Quittez le conteneur, puis supprimez le.
-
Cette fois-ci, qu’est devenu le fichier
financiers.adocque vous avez manipulé au sein du conteneur ?
6. Exercice : faciliter le déploiement de economic_dispatch
6.1. ĂnoncĂ©
Dans cet exercice on se propose de reprendre l’exercice economic_dispatch du TP prĂ©cĂ©dent, mais lĂ aussi sans exĂ©cuter la commande podman container cp : on souhaite cette fois-ci reposer sur un montage de rĂ©pertoire afin de passer le programme ainsi que le fichier de test dans le conteneur.
| Relisez bien l’Ă©noncĂ© de l’exercice du TP prĂ©cĂ©dent, et pour la suite n’hĂ©sitez pas Ă partir de la commande que vous aviez dĂ©jĂ prĂ©parĂ© lorsque vous aviez fait cet exercice. |
6.2. Questions
-
Sur l’environnement de dĂ©ploiement, prĂ©parez un nouveau rĂ©pertoire que vous monterez au sein de votre conteneur.
-
Dans ce répertoire, ajoutez le fichier
economic_dispatch.jl, ainsi qu’un fichier de test permettant de tester l’outil (se rĂ©fĂ©rer au README). -
Préparez un conteneur, avec un nom, avec les options permettant les interactions clavier, la dépendance requise par
economic_dispatch, et avec un montage du rĂ©pertoire prĂ©parĂ© Ă la question prĂ©cĂ©dente.Comme dans le TP prĂ©cĂ©dent, n’hĂ©sitez pas Ă dĂ©marrer votre conteneur avec un point d’entrĂ©e plus adaptĂ© Ă vos besoins, par exemple bash. -
Dans votre conteneur, vĂ©rifiez que votre dĂ©pendance est bien installĂ©e (pensez Ă utiliser l’option
--version). -
ExĂ©cutez l’outil Ă l’aide du fichier test, et observez que vous obtenez les mĂȘmes rĂ©sultats que ceux montrĂ©s dans le README.
-
S’il n’y a pas d’erreur, c’est bon ! Quittez le conteneur puis supprimez-le lorsque vous avez terminĂ©.
7. Exercice : déployer le logiciel docker-ffmpeg-converter
Jusqu’ici nous n’avons effectuĂ© que des dĂ©ploiements de logiciels "jouets" permettant de manipuler les notions du cours en douceur. Dans ce dernier exercice, l’objectif est de dĂ©ployer un "vrai" logiciel existant, qui n’a pas Ă©tĂ© prĂ©parĂ© juste pour les objectifs de ce cours.
7.1. ĂnoncĂ©
Nous souhaitons déployer le logiciel docker-ffmpeg-converter.
Ce logiciel se charge de convertir automatiquement des vidĂ©os dans un format souhaitĂ© Ă l’aide de l’outil linux ffmpeg, en lisant automatiquement et continuellement les vidĂ©os d’un rĂ©pertoire dit "source", et en produisant automatiquement les vidĂ©os converties dans un autre rĂ©pertoire dit "destination".
| docker-ffmpeg-converter est similaire au cas d’Ă©tude Automatic-Image-Converter Ă©tudiĂ© en cours, mais convertit des vidĂ©os et non pas des images. |
Une image de conteneur a dĂ©jĂ Ă©tĂ© mise au point pour facilement dĂ©ployer docker-ffmpeg-converter. En lisant la documentation de l’image, on dĂ©couvre qu’elle possĂšde les caractĂ©ristiques suivantes :
-
Le point d’entrĂ©e de l’image est l’exĂ©cution du logiciel docker-ffmpeg-converter.
Comme le point d’entrĂ©e n’est pas un interprĂ©teur de commandes, il n’est pas pertinent de rendre interactif (via les options --ttyet--interactive) un conteneur créé Ă partir de cette image. En effet, le processus de docker-ffmpeg-converter n’attend aucune entrĂ©e clavier pour pouvoir fonctionner. -
Lorsqu’il est exĂ©cutĂ© au sein de cette image, docker-ffmpeg-converter est conçu pour comprendre notamment les variables d’environnement suivantes :
-
SOURCE_DIRECTORY_PATH: le rĂ©pertoire surveillĂ© par le logiciel, oĂč les utilisateurâ ices doivent dĂ©poser les fichiers vidĂ©os qu’iels souhaitent convertir. -
DESTINATION_DIRECTORY_PATH: le rĂ©pertoire oĂč le logiciel va Ă©crire les vidĂ©os une fois converties, et oĂč les utilisateurâ ices pourront rĂ©cupĂ©rer le rĂ©sultat. -
GLOB_PATTERNS: liste de motifs glob qui dĂ©finissent quels fichiers du rĂ©pertoire surveillĂ© sont pris en considĂ©ration par le logiciel. Par exemple le motif glob*.avifera que seuls les fichiers se terminant par l’extension.aviseront convertis. -
SCAN_INTERVAL: le nombre de secondes que va attendre docker-ffmpeg-converter avant de surveiller à nouveau le répertoire surveillé. -
FFMPEG_ARGS: arguments confiĂ©s Ă l’outilffmpeglorsqu’il est appelĂ© par docker-ffmpeg-converter pour convertir chaque fichier vidĂ©o dĂ©couvert. Ces arguments doivent ĂȘtre conformes aux options permises et reconnues parffmpeg. Si la valeur%sest utilisĂ©e dans un argument, docker-ffmpeg-converter la remplacera automatiquement par le nom du fichier d’entrĂ©e.ffmpegest un outil trĂšs complexe de traitement vidĂ©o ; il ne vous est pas demandĂ© de comprendre comment il fonctionne ou quelles options peuvent lui ĂȘtre confiĂ©es. -
LOG_FORMAT: le format d’affichage des messages de logging affichĂ© par le logiciel au cours de son exĂ©cution. Peut prendre la valeurjsonpour un affichage en JSON, outextpour un affichage en texte simple.
-
-
L’image de conteneur de docker-ffmpeg-converter est disponible sur le registre
ghcr.io(qui est celui de Github) sous le nomkennethwussmann/docker-ffmpeg-converter. -
Une étiquette valide pour cette image est
1.2.0.
On souhaite rĂ©aliser un dĂ©ploiement de docker-ffmpeg-converter sur l’environnement de dĂ©ploiement de TP avec les contraintes suivantes :
-
Le logiciel doit convertir tous les fichiers avec l’extension
.webmdĂ©posĂ©s dans le rĂ©pertoire~/tp-montage/docker-ffmpeg-converter/inputsde l’environnement de dĂ©ploiement, -
Le logiciel doit déposer les fichiers convertis dans le répertoire
~/tp-montage/docker-ffmpeg-converter/outputsde l’environnement de dĂ©ploiement, -
On souhaite couvertir les fichiers d’entrĂ©e dans le format MP4, en fixant le nombre d’images par seconde Ă 24, et en produisant un fichier avec le suffixe
.mp4, et avec des message de logging rĂ©duits ; pour accomplir cela on souhaite passer les arguments suivants Ăffmpeg:-loglevel error -y -fflags +genpts -i %s -r 24 %s.mp4Comme dĂ©jĂ expliquĂ©, vous n’avez pas besoin de comprendre en dĂ©tail les arguments passĂ©s Ă ffmpeg. -
On souhaite que le logiciel vérifie la présence de nouveaux fichiers toutes les 5 secondes.
-
On souhaite que les messages de logging soient affichés en texte simple
7.2. Questions
-
Ă l’aide d’une crĂ©ation de conteneur, effectuez le dĂ©ploiement demandĂ© dans l’Ă©noncĂ©.
Vous allez avoir besoin de confier des variables d’environnement Ă votre conteneur, afin de configurer le logiciel dĂ©ployĂ©. N’hĂ©sitez pas Ă vous rĂ©fĂ©rer au le chapitre sur l’exĂ©cution des logiciels pour revoir cette notion, et au le chapitre dĂ©diĂ© Ă la crĂ©ation de conteneurs pour revoir comment transmettre une variable d’environnement Ă un conteneur donnĂ©. -
Constatez que le processus exĂ©cutĂ© dans le conteneur affiche des messages de logging dans le terminal oĂč vous avez créé le conteneur. Ces messages nous informent sur les actions rĂ©alisĂ©es par le logiciel.
-
Vérifiez que votre déploiement est conforme aux attentes :
-
Sur votre poste de travail, tĂ©lĂ©chargez la vidĂ©o WebM accessible via ce lien (une fois face Ă la vidĂ©o, utilisez le raccourci clavier Ctrl+S de votre navigateur pour l’enregistrer).
-
TransfĂ©rez cette vidĂ©o sur l’environnement de dĂ©ploiement distant, puis copiez cette vidĂ©o dans le rĂ©pertoire
~/tp-montage/docker-ffmpeg-converter/inputs -
Constatez dans les messages de log du logiciel que le fichier a été découvert et a été traité.
-
Constatez dans le répertoire
~/tp-montage/docker-ffmpeg-converter/inputsde l’environnement de dĂ©ploiement qu’une conversion en MP4 du fichier d’entrĂ©e est bien apparente. -
TransfĂ©rez le rĂ©sultat de la conversion sur votre poste de travail, et ouvrez le pour vĂ©rifier que la vidĂ©o convertie est bien la mĂȘme que la vidĂ©o d’origine.
-