0% ont trouvé ce document utile (0 vote)
59 vues5 pages

Sujet Du TP1

Sujet du TP1
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
59 vues5 pages

Sujet Du TP1

Sujet du TP1
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Module R4.05 16 mai 2025 I.U.T.

de Roanne - Département Réseaux et Télécommunications

TP 1 : Mise en place de l’automatisation sur Docker


P. Martini

Résumé : L’objectif de ce travail est de comprendre les différents concepts de base du fonctionnement de Docker, tels que
les images, les conteneurs, les volumes, le fichier Dockerfile. . .

Vous expérimenterez les TP à l’aide de la machine virtuelle utilisée pour les TD sur la baie de virtualisation VMWare.
Le modèle à utiliser afin de re-créer une machine virtuelle est MODELE_R4.05. Ce modèle contient l’environnement de
travail Linux ainsi que les outils nécessaires pour un avancement efficace dans le TP : bureaux virtuels accessibles à
l’aide de la molette de souris, volet terminal ddterm, Docker, Portainer accessible via le navigateur Brave. Le copier-
coller est activé entre la machine hôte utilisée et la machine virtuelle créée à partir du modèle. N’oubliez pas de vous
approprier la machine créée en modifiant son adresse IP dans les paramètres de configuration graphique.

I. conteneurs docker

## Exécuter une image Docker


docker run <conteneur_ID ou conteneur_NAME>
-t ou --tty : Allouer un pseudo TTY
--interactive ou -i : Garder un STDIN ouvert
--detach ou -d : Exécuter le conteneur en arrière-plan
--name : Attribuer un nom au conteneur
--expose: Exposer un port ou une plage de ports
-p ou --publish : Mapper un port "<PORT_CIBLE:PORT_SOURCE>"
--rm : Supprimer automatiquement le conteneur quand on le quitte
## Lister des conteneurs en état running Docker
docker conteneur ls
# ou
docker ps
-a ou --all : Afficher tous les conteneurs peut-importe leur état
## Supprimer un conteneur Docker
docker rm <conteneur_ID ou conteneur_NAME>
-f ou --force : forcer la suppression
## Supprimer tous les conteneurs Docker
docker rm -f $(docker ps -aq)
## Exécuter une commande dans un conteneur Docker
docker exec <conteneur_ID ou conteneur_NAME> <COMMAND_NAME>
-t ou --tty : Allouer un pseudo TTY
-i ou --interactive : Garder un STDIN ouvert
-d ou --detach : lancer la commande en arrière plan
## sorties/erreurs d’un conteneur
docker logs <conteneur_ID ou conteneur_NAME>
-f : suivre en permanence les logs du conteneur
-t : afficher la date et l’heure de la réception de la ligne de log
--tail <NOMBRE DE LIGNE> = nombre de lignes à afficher à partir de la fin (par défaut "all")
## Transformer un conteneur en image
docker commit <conteneur_NAME ou conteneur_ID> <NEW IMAGENAME>
-a ou --author <string> : Nom de l’auteur (ex "John Hannibal Smith <hannibal@[Link]>")
-m ou --message <string> : Message du commit

Question 1 Installez sur votre machine la dernière version de l’image UBUNTU.


Vérifiez que l’image est correctement installée ? Quand l’image a-t-elle été créée ?
Démarrez le conteneur UBUNTU à l’aide de la commande docker run ubuntu. Que se passe-t-il ?
Listez les conteneur actifs et inactifs. Redirigez l’entrée standard du conteneur avec l’option -i et ouvrez un pseudo-
terminal avec -t, le tout en exécutant le processus /bin/bash.
Quelle est la version d’Ubuntu du conteneur ?

P. Martini 1 Durée : 4 h
Module R4.05 16 mai 2025 I.U.T. de Roanne - Département Réseaux et Télécommunications

Listez les conteneurs actifs dans un second terminal. Conclusion ?


Le principe d’un conteneur est qu’il ressemble à une VM vu de l’intérieur, mais qu’il est un ensemble de processus vus
de l’extérieur. L’extérieur ici, c’est la machine hôte — machine virtuelle créée à partir du modèle MODELE_R405 —.
Question 2 De la même manière, un conteneur obtient des interfaces réseaux qui sont privées, et séparées de la machine
hôte.
Listez les interfaces réseaux de votre conteneur. Quelle est son adresse IP ?
Docker assigne une adresse privée à chaque conteneur et lui donne accès à internet à travers une passerelle qui est
l’interface virtuelle docker de l’hôte. Pour bien le comprendre, trouvez la passerelle par défaut de votre conteneur et
vérifiez que c’est bien une des interfaces de la machine hôte. Quel est son nom ?
Arrêtez votre conteneur puis redémarrer-le. Vérifiez que le conteneur est actif. Le problème est qu’il faut se connecter
au conteneur (puisqu’il s’agit ici d’une machine virtuelle légère). testez la commande docker attach ubuntu. Supprimez
votre conteneur.
Question 3 Redémarrer un autre conteneur basé sur l’image Ubuntu avec un nom différent.
Inspectez ce qui se passe dans le conteneur depuis la machine hôte avec les commandes de log.
Visualisez le démon docker qui reporte les manipulations que vous effectués (démarrage, arrêt de conteneurs. . .). Faites
le test en faisant un ps dans le conteneur et en ayant le log ouvert en continu depuis l’hôte. Puis faites un top dans le
conteneur.
Ajoutez l’option t.
Visualisez les statistiques d’utilisation des ressources (processeur, mémoire, réseau. . .) des conteneurs. Pour que cela
soit intéressant, il faut que le conteneur soit actif.
Question 4 Listez les images disponibles.
Ajoutez à partir du hub docker, ou directement dans le terminal, l’image Apache officielle (aussi connu sous le nom
httpd) puis téléchargez-la.
Vous allez maintenant créer votre propre image qui va vous permettre de lancer un serveur Web apache. Pour cela, il
faut définir la méthode de construction du conteneur dans un fichier.
Créez le répertoire ∼/Docker/Apache. Dans ce répertoire, créez un fichier Dockerfile. Dans ce fichier, mettez les
commandes :

FROM ubuntu:latest
MAINTAINER Votre nom
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update && apt install -y tzdata && apt install -y apache2
WORKDIR /var/www/html
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_PID_FILE /var/run/[Link]
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
RUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR
ENTRYPOINT [ "/usr/sbin/apache2" ]
CMD ["-D", "FOREGROUND"]
EXPOSE 80

Créez l’image à partir du fichier Dockerfile.


Listez vos images.
Question 5 Jusqu’à présent, nous avez fait tourner des conteneurs ubuntu en mode interactif. C’est intéressant, mais dans
un contexte de production où un opérateur veut démarrer beaucoup de conteneurs sur une machine, on veut démarrer
les conteneurs en mode démon, c’est-à-dire en tâche de fond. Cela se fait simplement avec l’option -d.
Testez sur l’image Ubuntu en nommant le conteneur demon. Que se passe-t-il ? Listez les conteneurs actifs pour
comprendre.
Détruisez le conteneur précédent. Vous allez corriger le problème précédent en faisant quelque chose dans le conteneur :

docker run -d --name=demon ubuntu /bin/sh -c "while true ; do echo coucou ; sleep 1 ; done"

Montrez ce qui se passe dans le conteneur depuis la machine hôte puis détruisez le conteneur.
Démarrez un conteneur apache en mode démon en exposant le port 80.

P. Martini 2 Durée : 4 h
Module R4.05 16 mai 2025 I.U.T. de Roanne - Département Réseaux et Télécommunications

La dernière commande du fichier Dockerfile précédent permet d’exposer un port interne du conteneur (le port 80 du ser-
veur apache) depuis l’hôte. Pour trouver quel port est choisi par Docker, il suffit de taper docker port <votre-conteneur>
80. Faites un test en ouvrant votre navigateur et vous connectant à partir de la machine locale sur le port docker.
Fixez maintenant le port choisi, par exemple le port 8080.
Stoppez, détruisez et recréez votre conteneur pour vérifier que cela fonctionne.
On veut maintenant en plus contrôler le contenu du serveur Web depuis l’hôte. Pour cela, vous allez créer un répertoire
website dans le répertoire Apache créé précédemment, et mettre dans ce répertoire le fichier [Link] avec le contenu
suivant :

<html>
ce que vous voulez
</html>

Démarrez votre conteneur en montant le répertoire apache là où le serveur Apache du conteneur va chercher ses
données puis vérifiez que le conteneur offre le service attendu.
II. Images docker

## Afficher de l’aide
docker help
docker <sous-commande> --help
## Afficher des informations sur l’installation de Docker
docker --version
docker version
docker info
## Executer une image Docker
docker run hello-world
## Lister des images Docker
docker image ls
# ou
docker images
## Supprimer une image Docker
docker images rmi <IMAGE_ID ou IMAGE_NAME> # si c’est le nom de l’image
qui est spécifié alors il prendra par défaut le tag latest
-f ou --force : forcer la suppression
## Supprimer tous les images Docker
docker rmi -f $(docker images -q)
## Rechercher une image depuis le Docker hub Registry
docker search ubuntu
--filter "is-official=true" : Afficher que les images officielles
## Télécharger une image depuis le Docker hub Registry
docker pull <IMAGE_NAME> # prendra par défaut le tag latest
docker pull ubuntu:16.04 # prendra le tag 16.04

III. Dockerfile
Vous allez créer votre propre serveur LAMP (Linux Apache MySQL PHP) au moyen de Docker. Voici les différentes couches
de cette image :
— Une couche OS pour exécuter notre Apache, MySQL et Php, basée sur la distribution Ubuntu ;
— une couche Apache pour démarrer le serveur web ;
— une couche php qui contiendra un interpréteur Php et ses bibliothèques ;
— une couche Mariadb qui contiendra notre système de gestion de bases de données.
Voici les différentes directives permettant de créer le fichier Dockerfile :

FROM : Définit l’image de base qui sera utilisée par les instructions suivantes.
LABEL : Ajoute des métadonnées à l’image avec un système de clés-valeurs,
permet par exemple d’indiquer à l’utilisateur l’auteur du Dockerfile.
ARG : Variables temporaires qu’on peut utiliser dans un Dockerfile.

P. Martini 3 Durée : 4 h
Module R4.05 16 mai 2025 I.U.T. de Roanne - Département Réseaux et Télécommunications

ENV : Variables d’environnements utilisables dans votre Dockerfile et conteneur.


RUN : Exécute des commandes Linux ou Windows lors de la création de l’image.
Chaque instruction RUN va créer une couche en cache qui sera réutilisée
dans le cas de modification ultérieure du Dockerfile.
COPY : Permet de copier des fichiers depuis notre machine locale vers le conteneur Docker.
ADD : Même chose que COPY mais prend en charge des liens ou des archives (si le format est reconn
alors il sera décompressé à la volée).
ENTRYPOINT : comme son nom l’indique, c’est le point d’entrée de votre conteneur, en d’autres ter
c’est la commande qui sera toujours exécutée au démarrage du conteneur. Il prend la forme de tabl
JSON (ex : CMD ["cmd1","cmd1"]) ou de texte.
CMD : Spécifie les arguments qui seront envoyés au ENTRYPOINT, (on peut aussi l’utiliser pour lan
commandes par défaut lors du démarrage d’un conteneur). S’il est utilisé pour fournir des argumen
défaut pour l’instruction ENTRYPOINT, alors les instructions CMD et ENTRYPOINT doivent être spéci
au format de tableau JSON.
WORKDIR : Définit le répertoire de travail qui sera utilisé pour le lancement des commandes CMD e
ENTRYPOINT ainsi que le dossier courant lors du démarrage du conteneur.
EXPOSE : Expose un port.
VOLUMES : Crée un point de montage qui permettra de rendre les données persistentes.
USER : Désigne quel est l’utilisateur qui lancera les prochaines instructions RUN, CMD ou ENTRYPO
(par défaut c’est l’utilisateur root).

L’environnement de travail contenant les fichiers nécessaires à la réalisation du serveur se trouve sur Moodle.
Téléchargez-le fichier zip à partir de votre machine hôte.

Question 6 Les éléments à définir dans le fichier Dockerfile sont les suivants :
— FROM : créez une couche OS, à partir de l’image debian:stable-slim ;
— LABEL : ajoutez les métadonnées de votre image — auteur, adresse de couriel. . . — récupérable par docker inspect
<IMAGE> ;
— ARG : créez deux variables temporaires, l’une, nommée APT_options pour la commande apt, permettant de valider
les questions du système, l’autre, nommée REP_APACHE, spécifiant le répertoire de travail du serveur apache ;
— RUN : créez la couche WEB en récupérant la liste des paquets à mettre à jour et en installant apache2 ;
— RUN : créez la couche MARIADB en installant son paquet ;
— COPY : copiez le fichier [Link] à la racine du conteneur ;
— RUN : créez la couche PHP en installant les paquets php et php-mysql. Supprimez le fichier [Link] du répertoire
APACHE. Videz le cache du gestionnaire de paquet ;
— COPY : copiez le répertoire app dans le répertoire APACHE ;
— EXPOSE : ouvrez le port HTTP ;
— WORKDIR : positionnez le répertoire APACHE comme répertoire de travail ;
— ENTRYPOINT : démarrez le service mariadb et construisez l’architecture de la base de données à l’aide du fi-
chier [Link], puis lancez le service apache2 au premier plan à l’aide de la commande apache2ctl -D
FOREGROUND.
Créez le fichier Dockerfile permettant de construire la pile LAMP.
Construisez l’image i-lamp sur le port 8081, puis démarrez le conteneur c-lamp.
Vérifiez le site internet [Link]

IV. Volumes Docker

## Créer un volume
docker volume create <VOLUME NAME>
# Lister les volumes
docker volume ls
## Supprimer un ou plusieurs volume(s)
docker volume rm <VOLUME NAME>
-f ou --force : forcer la suppression
## Récolter des informations sur une volume
docker volume inspect <VOLUME NAME>
## Supprimer tous les volumes locaux inutilisés

P. Martini 4 Durée : 4 h
Module R4.05 16 mai 2025 I.U.T. de Roanne - Département Réseaux et Télécommunications

docker volume prune


-f ou --force : forcer la suppression
## Supprimer un conteneur Docker avec le/les volumes associés
docker rm -v <conteneur_ID ou conteneur_NAME>
-f ou --force : forcer la suppression
-v ou --volume : supprime les volumes associés au conteneur

Les volumes permettent de sauvegarder les données d’un conteneur en synchronisant un répertoire interne au conteneur
avec un répertoire local sur l’hôte. Les volumes peuvent être créés et gérés en dehors de la portée de tout conteneur, ou
directement à la création d’un conteneur par Docker.
Question 7 Créez un fichier Dockerfile permettant :
— de créer une image linux alpine, dernière version ;
— de créer un répertoire /test
— de positionner le répertoire /test en tant que répertoire de travail.
Question 8 Créez l’image i-test à partir du fichier Dockerfile.
Question 9 Créez le conteneur c-test en montant le répertoire local rep-test dans le répertoire /test du conteneur.
Question 10 Créez dans le dossier /test un fichier avec le texte suivant :

root@270bc6facfe0:/# echo "ceci est un test" > /[Link]

Vérifiez la création du fichier dans le répertoire rep-test.


Question 11 Quittez le conteneur et supprimez-le.
Question 12 Recréer un nouveau conteneur c-test2, pour vérifier que les données ont bien été sauvegardées.
Question 13 Reprenez la pile LAMP de la section III en page 3. Ajoutez la persistance de données à l’aide de volumes, car,
lors d’un redémarrage du conteneur, les deux problèmes suivants vont apparaître :
— La base de données ne sera pas sauvegardée ;
— les modifications des sources de l’application ne seront pas appliquées.
Créez un volume nommé « mysqldata » qui sera synchronisé avec le dossier /var/lib/mysql du conteneur.
Pour les sources de l’application, créez un volume nommé « app » qui sera synchronisé avec le dossier /var/www/html
du conteneur.
Vérifiez le bon fonctionnement des volumes.

P. Martini 5 Durée : 4 h

Vous aimerez peut-être aussi