3.9 KiB
::::: {.exercice}
Écrivez un programme tirant parti de l'API du Docker Engine (le daemon Docker) qui pour un conteneur donné :
- détecte si le conteneur exécute une image disposant d'une mise à jour ;
- cherche à récupérer la dernière image disponible ;
- mette à jour le contneur ;
- dans un conteneur, automatiquement pour toutes les images.
Étape 1 : Lister les conteneurs
Lancé sans argument, votre programme doit retourner la liste des conteneurs actifs. Un nom par ligne.
Exemple d'exécution {-}
Étape 1 bis : Prêt pour la prod
É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
utilisant les bonnes pratiques vues en cours.
Exemple d'exécution {-}
Après l'étape 2 :
42sh$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock login/ctr-updater myp0m 42sh$ echo $? 0 # Le conteneur est à jour
</div>
Notez que l'on n'emploie pas `ctr-updater` pour appeler le binaire dans
l'image. Le premier argument passé au conteneur est donc le nom du conteneur à
vérifier.
## Étape 2 : Détecter si le conteneur exécute la dernière image disponible
Lancé avec un argument, votre programme doit, à partir des informations
accessibles localement (conteneurs et images), retourner le code de 0 ou 1,
suivant si (0) aucune mise à jour de l'image n'est disponible, respectivement
(1) une mise à jour est disponible.
### Exemple d'exécution {-}
<div lang="en-US">
```bash
42sh$ docker build -t my_webserver .
42sh$ docker run -d --name mws my_webserver
42sh$ ctr-updater mws
42sh$ echo $?
0 # Le conteneur est à jour
42sh$ echo "nouvelle page" > index.html
42sh$ docker build -t my_webserver .
42sh$ ctr-updater mws
42sh$ echo $?
1 # Une mise à jour est dispo.
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.
Étape 3 : Chercher une mise à jour l'image
En ajoutant l'option --pull
, votre programme va lancer un pull de l'image
avant de faire la vérification.
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
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
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
aura téléchargé localement l'image.
Étape 4 : Mettre à jour le conteneur
En ajoutant l'option --autoupdate
, si une mise à jour de l'image utilisée par
le conteneur est disponible (après un éventuel pull
si l'option est passée),
le conteneur est arrêté, supprimé, puis relancé avec les mêmes options, mais en
utilisant la nouvelle image.
Il est attendu dans ce cas de toujours retourner le statut 0 si la mise à jour se passe bien.
:::::