Objectifs et cours associés
Construire une image à partir d’un Dockerfile et observer son utilisation par un conteneur.
Pour réviser les notions utilisées dans ce TP :
Préparation
Prérequis
Configuration pour Windows
Guide : Préparer Docker pour les TP
Les commandes se feront directement depuis un terminal PowerShell.
Configuration pour Linux
Compte student, membre de devops, avec accès sudo ; terminal Linux et systemd.
Guide : Préparer Linux pour les TP
Moteur Docker et Compose disponibles.
Guide : Préparer Docker pour les TP
Dans le terminal Linux, entrer dans student si nécessaire :
Terminal Linux
su - studentSi vous êtes déjà connecté avec student, conserver cette session.
Dépendances
Configuration pour Windows
Ouvrir Docker Desktop depuis le menu Démarrer et attendre que le moteur fonctionne, en mode conteneurs Linux.
Terminal Windows — PowerShell
docker version
docker compose versiondocker version doit afficher Client et Server.
Si Server est indisponible, attendre le démarrage du moteur ou corriger Docker Desktop avant de poursuivre.
Utiliser PowerShell 7.4 ou ultérieur pour les scripts .ps1 fournis.
Ressources et point de départ
Télécharger les ressources, puis les extraire dans le dossier du TP.
Les chemins désignent le poste du laboratoire, pas le serveur du wiki.
Télécharger tp-02.zip, puis copier et extraire l’archive dans le dossier du TP :
Terminal Windows — PowerShell
# Créer le dossier indiqué pour les fichiers de travail du TP.
mkdir "$env:USERPROFILE/devops-formation/tp-05-02"
# Se placer dans ce dossier pour préparer les dépendances.
cd "$env:USERPROFILE/devops-formation/tp-05-02"
cp "$env:USERPROFILE/Downloads/tp-02.zip" . -Force
Expand-Archive ./tp-02.zip -DestinationPath . -Force
ls -ForceLire les fichiers du TP
Avec Visual Studio Code et la commande code disponibles, ouvrez le dossier préparé ci-dessus :
Terminal Windows — PowerShell
cd "$env:USERPROFILE/devops-formation/tp-05-02"
code .Dans VS Code, lisez Dockerfile, .dockerignore et index.html.
Repérez l’image NGINX choisie par FROM et la page ajoutée par COPY.
Configuration pour Linux
Utiliser le moteur préparé par le guide commun :
Terminal Linux
docker version
docker compose versionClient et Server doivent être disponibles.
Les services applicatifs seront lancés par les commandes du TP ; ne pas installer les serveurs web ou bases de données sur le poste.
Ressources et point de départ
Télécharger les ressources, puis les extraire dans le dossier du TP.
Les chemins désignent le poste du laboratoire, pas le serveur du wiki.
Terminal Linux
# Créer le dossier indiqué pour les fichiers de travail du TP.
mkdir -p ~/devops-formation/tp-05-02
# Se placer dans ce dossier pour préparer les dépendances.
cd ~/devops-formation/tp-05-02
unzip tp-02.zip
ls -laLire les fichiers du TP
Avec Visual Studio Code et la commande code disponibles, ouvrez le dossier préparé ci-dessus :
Terminal Linux — Bash
cd ~/devops-formation/tp-05-02
code .Dans VS Code, lisez Dockerfile, .dockerignore et index.html.
Repérez l’image NGINX choisie par FROM et la page ajoutée par COPY.
Étape 1 : Créer et taguer une image à partir d’un Dockerfile
Avec le compte de travail, créer le dossier du TP puis s’y placer :
Terminal Windows — PowerShell
# Créer le dossier indiqué pour les fichiers de travail du TP.
mkdir "$env:USERPROFILE/devops-formation/tp-05-02"
# Se placer dans le dossier requis pour les commandes suivantes.
cd "$env:USERPROFILE/devops-formation/tp-05-02"Avec le compte de travail, créer le dossier du TP puis s’y placer :
Terminal Linux
# Créer le dossier indiqué pour les fichiers de travail du TP.
mkdir -p ~/devops-formation/tp-05-02
# Se placer dans le dossier requis pour les commandes suivantes.
cd ~/devops-formation/tp-05-02Depuis le dossier du TP, construisez l’image décrite par le Dockerfile et attribuez-lui le nom asd-tp02-web et le tag 1.0.
Cette image utilisera NGINX et contiendra la page index.html fournie, grâce à l’instruction COPY.
Terminal — PowerShell (Windows) ou Bash (Linux)
# Afficher le dossier courant.
pwd
# Construire et taguer l’image à partir du Dockerfile et du contexte indiqués.
docker build --progress=plain -t asd-tp02-web:1.0 .Conclusion : Le build utilise le Dockerfile et le contexte fourni pour produire une image identifiée par son tag ; il ne démarre pas encore le serveur web.
Si vos observations ne permettent pas de confirmer cette conclusion, comparez le résultat aux indications d’Observer et reprenez les commandes de cette manipulation. Relisez au besoin : 3.3 Dockerfile ; 3.4 Contexte ; 3.2 Couches et cache.
Comprendre la construction : Le point final de docker build désigne le répertoire courant comme contexte de construction fourni au moteur par le client Docker.
COPY utilise ce contexte pour trouver index.html et le copie dans /usr/share/nginx/html/index.html dans l’image.
.dockerignore exclut des fichiers de ce contexte.
Étape 2 : Créer et démarrer un conteneur à partir de la première image
Créez et démarrez un conteneur à partir de asd-tp02-web:1.0.
Publiez le port 80 du conteneur sur le port 8082 du poste, accessible uniquement sur 127.0.0.1, puis interrogez la page.
Comparez ensuite l’identifiant de l’image taguée avec celui de l’image utilisée par le conteneur.
Commandes selon votre OS
Terminal — PowerShell (Windows) ou Bash (Linux)
# Créer et démarrer un conteneur avec l’image, les ports et les montages indiqués.
docker run -d --name asd-tp02-web -p 127.0.0.1:8082:80 asd-tp02-web:1.0
# Envoyer la requête HTTP et examiner la réponse du service ciblé.
curl -f http://127.0.0.1:8082
# Lire les métadonnées de l’image pour contrôler son identité ou sa construction.
docker image inspect asd-tp02-web:1.0 --format '{{.Id}}'
# Lire les métadonnées de la ressource Docker pour vérifier son état ou sa configuration.
docker inspect asd-tp02-web --format '{{.Image}}'À observer : La page affiche Version 1.
Les deux identifiants correspondent à la même image avant la reconstruction de l’étape suivante.
docker image inspect affiche l’identifiant de l’image taguée ; docker inspect affiche celui de l’image utilisée par le conteneur.
Conclusion : Le conteneur exécute l’image construite et publie le port choisi ; la réponse HTTP permet de vérifier le contenu réellement servi.
Si vos observations ne permettent pas de confirmer cette conclusion, comparez le résultat aux indications d’Observer et reprenez les commandes de cette manipulation. Relisez au besoin : 3.3 Dockerfile ; 3.4 Contexte ; 3.2 Couches et cache.
Étape 3 : Modifier la page et reconstruire l’image
Remplacez Version 1 par Version 2 dans index.html, puis reconstruisez l’image avec le même tag.
Observez les étapes mises en cache et comparez les identifiants de la nouvelle image et de celle utilisée par le conteneur existant.
Interrogez enfin la page servie par ce conteneur.
Commandes selon votre OS
Terminal Windows — PowerShell
# Remplacer le contenu ciblé dans le fichier pour préparer la nouvelle version.
(cat ./index.html -Raw).Replace('Version 1','Version 2') | Set-Content ./index.html -Encoding utf8
# Construire et taguer l’image à partir du Dockerfile et du contexte indiqués.
docker build --progress=plain -t asd-tp02-web:1.0 .
# Lire les métadonnées de l’image pour contrôler son identité ou sa construction.
docker image inspect asd-tp02-web:1.0 --format '{{.Id}}'
# Lire les métadonnées de la ressource Docker pour vérifier son état ou sa configuration.
docker inspect asd-tp02-web --format '{{.Image}}'
# Envoyer la requête HTTP et examiner la réponse du service ciblé.
curl -f http://127.0.0.1:8082Terminal Linux — Bash
# Remplacer le contenu ciblé dans le fichier pour préparer la nouvelle version.
sed -i 's/Version 1/Version 2/' index.html
# Construire et taguer l’image à partir du Dockerfile et du contexte indiqués.
docker build --progress=plain -t asd-tp02-web:1.0 .
# Lire les métadonnées de l’image pour contrôler son identité ou sa construction.
docker image inspect asd-tp02-web:1.0 --format '{{.Id}}'
# Lire les métadonnées de la ressource Docker pour vérifier son état ou sa configuration.
docker inspect asd-tp02-web --format '{{.Image}}'
# Envoyer la requête HTTP et examiner la réponse du service ciblé.
curl -f http://127.0.0.1:8082À observer : La reconstruction crée une nouvelle image sans remplacer le conteneur existant.
Celui-ci sert encore Version 1.
Conclusion : Reconstruire après modification produit une image mise à jour ; le cache réutilise les étapes dont les entrées n’ont pas changé.
Si vos observations ne permettent pas de confirmer cette conclusion, comparez le résultat aux indications d’Observer et reprenez les commandes de cette manipulation. Relisez au besoin : 3.3 Dockerfile ; 3.4 Contexte ; 3.2 Couches et cache.
À retenir : Reconstruire une image ne signifie pas que le conteneur en cours l’utilise.
Il conserve l’image avec laquelle il a été créé ; nous le recréerons à l’étape suivante.
Pourquoi regarder le cache ? Les mentions CACHED montrent les étapes que Docker a pu réutiliser pour accélérer la construction.
Comme index.html a changé, COPY doit être réexécutée.
Observer le cache explique comment l’image est reconstruite ; comparer les identifiants et la réponse HTTP montre quelle image le conteneur utilise.
Étape 4 : Recréer le conteneur avec la nouvelle image
Supprimez le conteneur existant, puis recréez-le à partir du tag asd-tp02-web:1.0, qui désigne désormais la nouvelle image.
Interrogez la page et comparez à nouveau les identifiants.
Commandes selon votre OS
Terminal — PowerShell (Windows) ou Bash (Linux)
# Supprimer les conteneurs nommés ; leur couche inscriptible sera perdue.
docker rm -f asd-tp02-web
# Créer et démarrer un conteneur avec l’image, les ports et les montages indiqués.
docker run -d --name asd-tp02-web -p 127.0.0.1:8082:80 asd-tp02-web:1.0
# Envoyer la requête HTTP et examiner la réponse du service ciblé.
curl -f http://127.0.0.1:8082
# Lire les métadonnées de la ressource Docker pour vérifier son état ou sa configuration.
docker inspect asd-tp02-web --format '{{.Image}}'
# Lire les métadonnées de l’image pour contrôler son identité ou sa construction.
docker image inspect asd-tp02-web:1.0 --format '{{.Id}}'À observer : Le nouveau conteneur sert Version 2 et utilise la nouvelle image.
Conclusion : Le conteneur existant doit être remplacé pour utiliser la nouvelle image ; reconstruire l’image ne change pas les fichiers du conteneur déjà créé.
Si vos observations ne permettent pas de confirmer cette conclusion, comparez le résultat aux indications d’Observer et reprenez les commandes de cette manipulation. Relisez au besoin : 3.3 Dockerfile ; 3.4 Contexte ; 3.2 Couches et cache.
Vérification finale
- Deux réponses HTTP différentes relevées.
- IDs image/conteneur comparés avant et après recréation.
Retenir
Réponses aux trois repères du TP
- Le contexte fixe les sources accessibles à COPY.
- Le cache évite de recalculer une étape inchangée.
- Un conteneur conserve son image de création.
TP mentionnés dans les commandes : TP-08
Nettoyage
Dépendances
Configuration pour Windows
Dans PowerShell, avec Docker Desktop démarré, exécutez le nettoyage suivant.
Nettoyage ciblé et reprise
Commandes selon votre OS
docker rm -f asd-tp02-web
# Conserver l’image pour TP-08, ou la supprimer explicitement :
# docker image rm asd-tp02-web:1.0Vos fichiers restent dans $env:USERPROFILE/devops-formation/tp-05-02.
Supprimez uniquement les ressources nommées dans les commandes de ce TP.
Guide : Préparer Docker pour les TP.
Retirer un moteur supprime ou rend indisponibles ses ressources : sauvegarder et vérifier les usages avant de décider.
Conservez Docker pour les TP suivants.
Configuration pour Linux
Linux : exécuter le nettoyage ciblé dans le terminal relié au Docker Engine natif du TP.
Ne pas toucher aux ressources d’un autre contexte.
Nettoyage ciblé et reprise
Commandes selon votre OS
docker rm -f asd-tp02-web
# Conserver l’image pour TP-08, ou la supprimer explicitement :
# docker image rm asd-tp02-web:1.0Vos fichiers restent dans ~/devops-formation/tp-05-02.
Supprimez uniquement les ressources nommées dans les commandes de ce TP.
Guide : Préparer Docker pour les TP.
Retirer un moteur supprime ou rend indisponibles ses ressources : sauvegarder et vérifier les usages avant de décider.
Conservez Docker pour les TP suivants.
Prérequis
Configuration pour Windows
Conserver Docker Desktop et les dossiers de travail Windows pour les TP suivants.
Sauvegarder vos travaux avant tout retrait facultatif.
Conserver le moteur Docker pour la suite.
Guide : Préparer Docker pour les TP
Fermer Terminal Windows lorsque les commandes sont terminées.
Docker Desktop reste disponible pour les autres TP.
Configuration pour Linux
Conserver student, devops et l’environnement pour les TP suivants.
Le retrait complet reste facultatif, après nettoyage des dépendances et sauvegarde des travaux.
Guide : Préparer Linux pour les TP
Conserver le moteur Docker pour la suite.
Guide : Préparer Docker pour les TP
exit quitte la session student et revient au compte initial si vous avez utilisé su - student.
Le système Linux du poste reste installé.