Work on tuto 2
This commit is contained in:
parent
1ca35a1d57
commit
bc179806db
19 changed files with 545 additions and 145 deletions
12
subject/docker-updater/Makefile
Normal file
12
subject/docker-updater/Makefile
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
include ../../tutorial/pandoc-opts.mk
|
||||
|
||||
SOURCES = subject.md docker-api.md ex-api-updater-intro.md ex-api-updater.md rendu.md end.md
|
||||
|
||||
|
||||
all: subject.pdf
|
||||
|
||||
subject.pdf: ${SOURCES}
|
||||
pandoc ${PANDOCOPTS} -o $@ $+
|
||||
|
||||
clean::
|
||||
rm subject.pdf
|
||||
0
subject/docker-updater/docker-api.md
Normal file
0
subject/docker-updater/docker-api.md
Normal file
1
subject/docker-updater/end.md
Normal file
1
subject/docker-updater/end.md
Normal file
|
|
@ -0,0 +1 @@
|
|||
Bon courage !
|
||||
2
subject/docker-updater/ex-api-updater-intro.md
Normal file
2
subject/docker-updater/ex-api-updater-intro.md
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
Mini-projet
|
||||
===========
|
||||
131
subject/docker-updater/ex-api-updater.md
Normal file
131
subject/docker-updater/ex-api-updater.md
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
::::: {.exercice}
|
||||
|
||||
Écrivez un programme tirant parti de l'API du Docker Engine (le *daemon*
|
||||
Docker) qui pour un conteneur donné :
|
||||
|
||||
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. mette à jour le contneur ;
|
||||
1. 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 {-}
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
42sh$ docker run -d nginx
|
||||
42sh$ docker run -d mysql
|
||||
42sh$ docker run -d redis
|
||||
42sh$ ctr-updater
|
||||
Choose a container to analyze:
|
||||
dazzling_driscoll
|
||||
amazing_proskuriakova
|
||||
optimistic_meninsky
|
||||
```
|
||||
</div>
|
||||
|
||||
|
||||
## É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 {-}
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
42sh$ docker run -d --name myp0m nemunaire/youp0m
|
||||
42sh$ docker build -t login/ctr-updater .
|
||||
42sh$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock login/ctr-updater
|
||||
Choose a container to analyze:
|
||||
myp0m
|
||||
|
||||
# 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.
|
||||
```
|
||||
</div>
|
||||
|
||||
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.
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
42sh$ docker run -d --name myp0m nemunaire/youp0m
|
||||
42sh$ ctr-updater myp0m
|
||||
42sh$ echo $?
|
||||
0 # Le conteneur est à jour
|
||||
42sh$ ctr-updater --pull myp0m
|
||||
42sh$ echo $?
|
||||
1 # Une mise à jour est dispo.
|
||||
42sh$ ctr-updater myp0m
|
||||
42sh$ echo $?
|
||||
1 # La nouvelle image a été pull précédemment
|
||||
# et est disponible dans le cache local
|
||||
```
|
||||
</div>
|
||||
|
||||
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.
|
||||
|
||||
:::::
|
||||
1
subject/docker-updater/rendu.md
Symbolic link
1
subject/docker-updater/rendu.md
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../../tutorial/2/rendu.md
|
||||
10
subject/docker-updater/subject.md
Normal file
10
subject/docker-updater/subject.md
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
title: Virtualisation légère -- Mini-projet n^o^ 2
|
||||
author: Pierre-Olivier *nemunaire* [Mercier]{.smallcaps}
|
||||
institute: EPITA
|
||||
date: EPITA -- Promo 2023
|
||||
abstract: |
|
||||
Le rendu de ce mini-projet individuel est attendu par un tag signé
|
||||
sur un dépôt privé de la forge de l'école au plus tard le **mardi
|
||||
18 octobre 2022 à 23 h 42**.
|
||||
...
|
||||
Loading…
Add table
Add a link
Reference in a new issue