This commit is contained in:
parent
394091338f
commit
c2fb8e9799
@ -1,23 +1,38 @@
|
|||||||
Utiliser l'API de Docker
|
Utiliser l'API de Docker
|
||||||
========================
|
========================
|
||||||
|
|
||||||
Le Docker Engine expose une API REST sur le protocole HTTP. Comme première
|
Le Docker Engine expose une API REST sur le protocole HTTP. Le client `docker`
|
||||||
tentative, vous pouvez essayer de récupérer des informations générales avec un
|
utilise cette API pour communiquer avec le daemon. C'est aussi cette même API
|
||||||
simple `curl` :
|
que `docker-compose` emploie. En fait n'importe quel programme peut en faire
|
||||||
|
usage, c'est d'ailleurs très simple d'utilisation.
|
||||||
|
|
||||||
|
Si vous n'avez jamais communiqué avec une API REST, voici un premier exemple
|
||||||
|
pour récupérer des informations générales sur le daemon Docker avec un simple
|
||||||
|
`curl` :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
```bash
|
```bash
|
||||||
curl -s --unix-socket /var/run/docker.sock http://localhost/v1.38/info | jq .
|
curl -s --unix-socket /var/run/docker.sock http://localhost/v1.38/info | jq .
|
||||||
```
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
On retrouve un objet JSON contenant des informations similaires à ce que l'on
|
On utilise l'option `--unix-socket` de `curl` car on ne se connecte pas
|
||||||
obtient avec un `docker info`.
|
directement à un port, comme c'est le cas habituellement avec le protocole
|
||||||
|
HTTP. Bien évidemment lorsque le daemon Docker se trouve sur une machine
|
||||||
|
distante (dans le cas de Docker Desktop sur Windows et Mac), on utilise l'IP et
|
||||||
|
le port de la machine distance.
|
||||||
|
|
||||||
|
Le premier élément dans le chemin de l'URL (`/v1.38/`) correspond à la version
|
||||||
|
de l'API que l'on souhaite utiliser. Celle-ci change dès que des
|
||||||
|
fonctionnalités sont ajoutées, à l'occasion d'une nouvelle version. Il n'est
|
||||||
|
généralement pas nécessaire de mettre à jour cette version dans les programmes
|
||||||
|
que vous développez car l'API est rétro-compatible : les anciennes versions de
|
||||||
|
l'API restent accessibles.
|
||||||
|
|
||||||
|
La commande que l'on a lancé nous retourne un objet JSON contenant des
|
||||||
|
informations similaires à ce que l'on obtient avec un `docker info`. L'avantage
|
||||||
|
est ici de pouvoir effectuer un traitement programmatique de ces informations.
|
||||||
|
|
||||||
Le premier élément dans le chemin de l'URL correspond à la version de l'API que
|
|
||||||
l'on souhaite utiliser. Celle-ci change dès que des fonctionnalités sont
|
|
||||||
ajoutées, à l'occasion d'une nouvelle version. Il n'est généralement pas
|
|
||||||
nécessaire de mettre à jour cette version dans les programmes que vous
|
|
||||||
développez car l'API est rétro-compatible : les anciennes versions de l'API
|
|
||||||
restent accessibles.
|
|
||||||
|
|
||||||
Pour réaliser cet exercice, vous pouvez utiliser le langage de votre choix, en
|
Pour réaliser cet exercice, vous pouvez utiliser le langage de votre choix, en
|
||||||
utilisant des outils ou des bibliothèques cohérents avec l'objectif recherché :
|
utilisant des outils ou des bibliothèques cohérents avec l'objectif recherché :
|
||||||
|
@ -5,8 +5,10 @@ Docker) qui pour un conteneur donné :
|
|||||||
|
|
||||||
1. détecte si le conteneur exécute une image disposant d'une mise à jour ;
|
1. détecte si le conteneur exécute une image disposant d'une mise à jour ;
|
||||||
1. cherche à récupérer la dernière image disponible ;
|
1. cherche à récupérer la dernière image disponible ;
|
||||||
1. mette à jour le contneur ;
|
1. met à jour le conteneur.
|
||||||
1. dans un conteneur, automatiquement pour toutes les images.
|
|
||||||
|
Enfin, pour simplifier son utilisation régulière, vous conceverez une image de
|
||||||
|
conteneur minimaliste.
|
||||||
|
|
||||||
## Étape 1 : Lister les conteneurs
|
## Étape 1 : Lister les conteneurs
|
||||||
|
|
||||||
@ -33,7 +35,7 @@ optimistic_meninsky
|
|||||||
|
|
||||||
Écrivez un `Dockerfile` pour conteneuriser ce programme : gérer tant la
|
Écrivez un `Dockerfile` pour conteneuriser ce programme : gérer tant la
|
||||||
construction (s'il y a des étapes de construction) que l'exécution. En
|
construction (s'il y a des étapes de construction) que l'exécution. En
|
||||||
utilisant les bonnes pratiques vues en cours.
|
utilisant les bonnes pratiques que nous avons pu voir.
|
||||||
|
|
||||||
### Exemple d'exécution {-}
|
### Exemple d'exécution {-}
|
||||||
|
|
||||||
@ -104,7 +106,7 @@ suivant si (0) aucune mise à jour de l'image n'est disponible, respectivement
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
N'hésitez pas à utiliser la sortie d'erreur et la sortie standard pour afficher
|
N'hésitez pas à utiliser la sortie d'erreur et la sortie standard pour afficher
|
||||||
des informations pour vous. Celles-ci ne seront pas vérifiées.
|
des informations de débogage pour vous.
|
||||||
|
|
||||||
::::: {.warning}
|
::::: {.warning}
|
||||||
|
|
||||||
@ -112,10 +114,11 @@ des informations pour vous. Celles-ci ne seront pas vérifiées.
|
|||||||
|
|
||||||
Par *image à jour*, on entend : « aligné par rapport à l'image du
|
Par *image à jour*, on entend : « aligné par rapport à l'image du
|
||||||
registre ». On ne s'intéresse pas à la date de construction ou de récupération
|
registre ». On ne s'intéresse pas à la date de construction ou de récupération
|
||||||
de l'image, mais uniquement à son identifiant. Si l'image sur laquelle se base
|
de l'image, mais uniquement à son identifiant. En bref : si l'image sur
|
||||||
un conteneur en cours d'exécution n'a pas le même identifiant que l'image du
|
laquelle se base un conteneur en cours d'exécution n'a pas le même identifiant
|
||||||
même tag dans le cache d'images, alors on considère que le conteneur doit être
|
que l'image du même tag dans le cache d'images, alors on considère que le
|
||||||
redémarré (même si la construction ou la récupération est antérieure).\
|
conteneur doit être redémarré (même si la construction ou la récupération est
|
||||||
|
antérieure).\
|
||||||
|
|
||||||
Attention, on souhaite rester sur **le même tag** que celui avec lequel on a
|
Attention, on souhaite rester sur **le même tag** que celui avec lequel on a
|
||||||
démarré le conteneur. Il ne s'agit pas de trouver un tag plus récent.
|
démarré le conteneur. Il ne s'agit pas de trouver un tag plus récent.
|
||||||
@ -135,7 +138,7 @@ plus souvent que les autres tags.
|
|||||||
|
|
||||||
## Étape 3 : Chercher une mise à jour l'image
|
## Étape 3 : Chercher une mise à jour l'image
|
||||||
|
|
||||||
En ajoutant l'option `--pull`, votre programme va lancer un pull de l'image
|
En ajoutant l'option `--pull`, votre programme va lancer un *pull* de l'image
|
||||||
avant de faire la vérification.
|
avant de faire la vérification.
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
@ -154,16 +157,24 @@ avant de faire la vérification.
|
|||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
::::: {.question}
|
||||||
|
|
||||||
L'image `youp0m` est mise à jour régulièrement. Il y a de forte chance pour
|
L'image `youp0m` est mise à jour régulièrement. Il y a de forte chance pour
|
||||||
qu'elle ne soit plus à jour si celle dont vous disposez date de plus d'une
|
qu'elle ne soit plus à jour si celle dont vous disposez date de plus d'une
|
||||||
semaine. Si vous possédez déjà la dernière version de vos conteneurs,
|
semaine. Si vous possédez déjà la dernière version de vos conteneurs,
|
||||||
recherchez une image sur le Docker Hub régulièrement mise à jour pour faire vos
|
recherchez une image sur le Docker Hub régulièrement mise à jour pour faire vos
|
||||||
tests.
|
tests.
|
||||||
|
|
||||||
Attention une fois l'image *pull* par `ctr-updater`, un appel à nouveau à
|
:::::
|
||||||
`ctr-updater` sans `--pull` retourne la mise à jour, car le `pull` précédent
|
|
||||||
|
::::: {.warning}
|
||||||
|
|
||||||
|
Une fois l'image *pull* par `ctr-updater`, un nouvel appel à `ctr-updater` sans
|
||||||
|
`--pull` indiquera qu'une mise à jour est disponible, car le `pull` précédent
|
||||||
aura téléchargé localement l'image.
|
aura téléchargé localement l'image.
|
||||||
|
|
||||||
|
:::::
|
||||||
|
|
||||||
::::: {.question}
|
::::: {.question}
|
||||||
|
|
||||||
#### Comment tester lorsqu'on a `pull` toutes ses images ? {-}
|
#### Comment tester lorsqu'on a `pull` toutes ses images ? {-}
|
||||||
|
Loading…
Reference in New Issue
Block a user