Objectifs et cours associés
Créer et piloter un conteneur par l’API locale du moteur Docker.
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 archives ci-dessous, puis les copier et les extraire avec les commandes fournies.
Copier et extraire les archives téléchargées :
Terminal Windows — PowerShell
mkdir "$env:USERPROFILE/devops-formation/tp-05-07" -Force
cd "$env:USERPROFILE/devops-formation/tp-05-07"
cp "$env:USERPROFILE/Downloads/tp-07.zip" . -Force
Expand-Archive ./tp-07.zip -DestinationPath . -Force
cd "$env:USERPROFILE/devops-formation/tp-05-07"
ls -ForceL’API est celle du daemon Docker local ; ne pas activer de port TCP public pour le daemon.
Lire 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-07"
code .Dans VS Code, lisez create.json pour identifier l’image, le nom et la configuration du conteneur qui sera créé par l’API.
Le helper fourni transporte les requêtes ; les étapes du TP vous feront envoyer ces requêtes.
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 archives ci-dessous, puis les copier et les extraire avec les commandes fournies.
Copier et extraire les archives téléchargées (avec unzip installé) :
Terminal Linux — Bash
mkdir -p ~/devops-formation/tp-05-07
cd ~/devops-formation/tp-05-07
cp ~/Downloads/tp-07.zip .
unzip -o ./tp-07.zip -d .
cd ~/devops-formation/tp-05-07
ls -aL’API est celle du daemon Docker local ; ne pas activer de port TCP public pour le daemon.
Lire 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-07
code .Dans VS Code, lisez create.json pour identifier l’image, le nom et la configuration du conteneur qui sera créé par l’API.
Le helper fourni transporte les requêtes ; les étapes du TP vous feront envoyer ces requêtes.
Étape 1 : Identifier exactement le moteur
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-07"
# Se placer dans le dossier requis pour les commandes suivantes.
cd "$env:USERPROFILE/devops-formation/tp-05-07"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-07
# Se placer dans le dossier requis pour les commandes suivantes.
cd ~/devops-formation/tp-05-07Docker Desktop local et PowerShell 7.4 ou ultérieur requis. Charger le helper fourni ; la CLI et le helper utilisent le même contexte named pipe.
Engine local et curl requis. Comparer la CLI et curl sur le même moteur. En cas de refus, utiliser sudo curl et sudo docker sans modifier les permissions du socket.
Commandes selon votre OS
Terminal Windows — PowerShell
# Identifier le contexte et le moteur Docker visés par les commandes.
docker context show
# Identifier le contexte et le moteur Docker visés par les commandes.
docker context inspect --format '{{.Endpoints.docker.Host}}'
# Afficher la valeur effective de cette variable pour vérifier le moteur ou la version d’API utilisés.
$env:DOCKER_HOST
# Afficher la valeur effective de cette variable pour vérifier le moteur ou la version d’API utilisés.
$env:DOCKER_CONTEXT
# Charger les fonctions du script dans la session courante pour les commandes suivantes.
. ./Invoke-DockerApi.ps1
# Envoyer la requête HTTP au moteur Docker et vérifier sa réponse.
Invoke-DockerApi -Path /_ping
# Envoyer la requête HTTP au moteur Docker et vérifier sa réponse.
Invoke-DockerApi -Path /version
# Envoyer la requête HTTP au moteur Docker et vérifier sa réponse.
Invoke-DockerApi -Path /_ping
# Envoyer la requête HTTP au moteur Docker et vérifier sa réponse.
Invoke-DockerApi -Path /versionTerminal Linux — Bash
# Identifier le contexte et le moteur Docker visés par les commandes.
docker context show
# Identifier le contexte et le moteur Docker visés par les commandes.
docker context inspect --format '{{.Endpoints.docker.Host}}'
# Afficher la valeur indiquée pour contrôler le résultat.
printf '%s
' "${DOCKER_HOST:-non-defini}" "${DOCKER_CONTEXT:-non-defini}"
# Lister les fichiers ou dossiers pour contrôler le résultat de la manipulation.
ls -l /var/run/docker.sock
# Envoyer la requête HTTP et examiner la réponse du service ciblé.
curl --unix-socket /var/run/docker.sock http://localhost/_ping
# Envoyer la requête HTTP et examiner la réponse du service ciblé.
curl --unix-socket /var/run/docker.sock http://localhost/versionRésultat attendu : contexte Docker Desktop local avec endpoint npipe:, sans overrides distants, réponse HTTP 200 et corps OK pour /_ping.
Observer avant de poursuivre : contexte unix:///var/run/docker.sock, aucun override distant et ping=OK. localhost désigne ici l’URL HTTP transportée par le socket Unix, sans ouverture TCP.
Conclusion : La CLI et les requêtes directes doivent viser le même moteur ; sinon leurs résultats ne décrivent pas les mêmes conteneurs.
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 : 6.4 Socket ; 6.5 API REST.
Étape 2 : Sélectionner l’API supportée
Lire ApiVersion/MinAPIVersion dans /version. La variable est relevée sur le serveur local, pas figée dans le TP.
Commandes selon votre OS
Terminal Windows — PowerShell
# Définir la valeur réutilisée par les commandes suivantes.
$api_version = docker version --format '{{.Server.APIVersion}}'
# Afficher la valeur effective de cette variable pour vérifier le moteur ou la version d’API utilisés.
$api_version
# Télécharger l’image depuis le registre.
docker pull nginx:1.28.0-alpine
# Envoyer la requête HTTP au moteur Docker et vérifier sa réponse.
Invoke-DockerApi -Path "/v${api_version}/containers/json?all=true"Terminal Linux — Bash
# Définir la valeur réutilisée par les commandes suivantes.
api_version=$(docker version --format '{{.Server.APIVersion}}')
# Afficher la valeur indiquée pour contrôler le résultat.
printf '%s
' "$api_version"
# Télécharger l’image depuis le registre.
docker pull nginx:1.28.0-alpine
# Envoyer la requête HTTP et examiner la réponse du service ciblé.
curl --unix-socket /var/run/docker.sock "http://localhost/v${api_version}/containers/json?all=true"Observer avant de poursuivre : La liste correspond à docker ps -a. L’image est disponible avant la création par API.
Conclusion : La version de l’API doit être compatible avec le moteur interrogé avant d’utiliser ses endpoints.
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 : 6.4 Socket ; 6.5 API REST.
Étape 3 : Créer et démarrer par HTTP
Le fichier create.json est déjà extrait dans tp-05-07.
Nous allons l’utiliser pour décrire le conteneur à créer via l’API.
Commandes selon votre OS
Terminal Windows — PowerShell
# Envoyer la requête HTTP au moteur Docker et vérifier sa réponse.
Invoke-DockerApi -Method POST -Path "/v${api_version}/containers/create?name=asd-tp07-api" -Json (cat ./create.json -Raw)
# Envoyer la requête HTTP au moteur Docker et vérifier sa réponse.
Invoke-DockerApi -Method POST -Path "/v${api_version}/containers/asd-tp07-api/start"
# Lister les conteneurs pour contrôler leur état et les ports publiés.
docker ps --filter name=asd-tp07-api
# Lire les métadonnées de la ressource Docker pour vérifier son état ou sa configuration.
docker inspect asd-tp07-api --format '{{.Id}} {{.State.Status}}'
# Envoyer la requête HTTP au moteur Docker et vérifier sa réponse.
Invoke-DockerApi -Path "/v${api_version}/containers/asd-tp07-api/json"Terminal Linux — Bash
# Envoyer la requête HTTP et examiner la réponse du service ciblé.
curl -i --unix-socket /var/run/docker.sock -H 'Content-Type: application/json' --data-binary @create.json "http://localhost/v${api_version}/containers/create?name=asd-tp07-api"
# Envoyer la requête HTTP et examiner la réponse du service ciblé.
curl -i -X POST --unix-socket /var/run/docker.sock "http://localhost/v${api_version}/containers/asd-tp07-api/start"
# Lister les conteneurs pour contrôler leur état et les ports publiés.
docker ps --filter name=asd-tp07-api
# Lire les métadonnées de la ressource Docker pour vérifier son état ou sa configuration.
docker inspect asd-tp07-api --format '{{.Id}} {{.State.Status}}'
# Envoyer la requête HTTP et examiner la réponse du service ciblé.
curl --unix-socket /var/run/docker.sock "http://localhost/v${api_version}/containers/asd-tp07-api/json"Observer avant de poursuivre : Création 201 et ID, démarrage 204, même ID dans inspect. Un 409 indique un nom déjà pris : examiner le conteneur existant avant toute suppression.
Conclusion : Les requêtes HTTP de création et de démarrage pilotent le moteur Docker, comme le fait la CLI avec ses propres commandes.
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 : 6.4 Socket ; 6.5 API REST.
Étape 4 : Arrêter puis supprimer uniquement ce conteneur
L’accès au moteur donne des droits d’administration étendus. L’application métier ne reçoit pas cet accès.
Commandes selon votre OS
Terminal Windows — PowerShell
# Envoyer la requête HTTP au moteur Docker et vérifier sa réponse.
Invoke-DockerApi -Method POST -Path "/v${api_version}/containers/asd-tp07-api/stop?t=10"
# Envoyer la requête HTTP au moteur Docker et vérifier sa réponse.
Invoke-DockerApi -Method DELETE -Path "/v${api_version}/containers/asd-tp07-api"
# Lister les conteneurs pour contrôler leur état et les ports publiés.
docker ps -a --filter name=asd-tp07-apiTerminal Linux — Bash
# Envoyer la requête HTTP et examiner la réponse du service ciblé.
curl -i -X POST --unix-socket /var/run/docker.sock "http://localhost/v${api_version}/containers/asd-tp07-api/stop?t=10"
# Envoyer la requête HTTP et examiner la réponse du service ciblé.
curl -i -X DELETE --unix-socket /var/run/docker.sock "http://localhost/v${api_version}/containers/asd-tp07-api"
# Lister les conteneurs pour contrôler leur état et les ports publiés.
docker ps -a --filter name=asd-tp07-apiObserver avant de poursuivre : Arrêt 204, suppression 204 puis absence dans ps -a. Aucun nettoyage global et aucune exposition réseau du daemon.
Conclusion : L’identifiant du conteneur permet de cibler son arrêt et sa suppression sans agir sur les autres ressources du moteur.
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 : 6.4 Socket ; 6.5 API REST.
Vérification finale
- API/version relevées, socket commun à CLI et curl.
- Statuts 201/204 et ID comparés.
- Conteneur disparu après suppression ciblée.
Retenir
Réponses aux trois repères du TP
- HTTP décrit la requête ; le transport local est celui utilisé dans le parcours.
- La CLI utilise elle aussi l’API du moteur.
- Les droits d’accès au moteur ne constituent pas un simple accès en lecture.
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
# Le nettoyage est réalisé à l’étape 4 ; aucune autre ressource à supprimer.Vos fichiers restent dans $env:USERPROFILE/devops-formation/tp-05-07.
Supprimez uniquement les ressources nommées dans les commandes de ce TP.
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
# Le nettoyage est réalisé à l’étape 4 ; aucune autre ressource à supprimer.Vos fichiers restent dans ~/devops-formation/tp-05-07.
Supprimez uniquement les ressources nommées dans les commandes de ce TP.
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é.