OS de votre poste :
Parcours Linux · Bash (.sh)
Module 05 · Docker DevOps · TP 07

TP-07 — Piloter Docker par son API locale

La commande docker transmet des demandes au moteur Docker. Vous effectuerez directement des requêtes vers son API locale pour créer, démarrer, arrêter et supprimer un conteneur.

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

Si vous êtes déjà connecté avec student, conserver cette session.

Dépendances

Configuration pour Linux

Utiliser le moteur préparé par le guide commun :

Terminal Linux

docker version
docker compose version

Client 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 -a

L’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 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-07

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 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/version

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

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

Retour au module · Documentation Docker

Nettoyage

Dépendances

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