Work on tuto 2
This commit is contained in:
parent
1ca35a1d57
commit
bc179806db
19 changed files with 545 additions and 145 deletions
|
|
@ -59,18 +59,86 @@ avec la commande `commit` :
|
|||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
docker container commit CONTAINER my_nano
|
||||
42sh$ docker ps
|
||||
CONTAINER ID IMAGE COMMAND STATUS NAMES
|
||||
91d17871d730 ubuntu "bash" Exited (0) musing_tu
|
||||
|
||||
docker container commit 91d17871d730 my_nano
|
||||
```
|
||||
</div>
|
||||
|
||||
en remplaçant `CONTAINER` par le nom ou l'identifiant du container qui
|
||||
en remplaçant `91d17871d730` par le nom ou l'identifiant du container qui
|
||||
doit servir de modèle. `my_nano` est le nom que vous voudrez utiliser
|
||||
à la place d'`ubuntu`.
|
||||
|
||||
L'action de *commit*, malgré le fait qu'elle crée une nouvelle image est très
|
||||
rapide : il se trouve que seules les différences avec l'image parente sont
|
||||
packagées. Les images sont en fait composées de couches : empilant les
|
||||
différences depuis le système de base !
|
||||
|
||||
Cette action va figer la couche la plus haute de systèmes de fichiers, qui
|
||||
était jusqu'alors en lecture-écriture pour le conteneur ; afin d'en faire la
|
||||
dernière couche de notre nouvelle image.
|
||||
|
||||
### À propos des couches
|
||||
|
||||
Revenons quelque-peu en arrière : lorsque nous avons fait notre premier `docker
|
||||
run hello-world`, rappelez-vous, Docker a téléchargé l'image en nous affichant
|
||||
la progression, juste avant de lancer le conteneur.
|
||||
|
||||
Analysons ensemble ces quelques lignes pour mieux comprendre de quoi les images
|
||||
se composent. Nous allons pour cela utiliser la commande `pull` pour récupérer
|
||||
une nouvelle image :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
42sh$ docker image pull python:3
|
||||
3: Pulling from library/python
|
||||
23858da423a6: Pull complete
|
||||
326f452ade5c: Pull complete
|
||||
a42821cd14fb: Pull complete
|
||||
8471b75885ef: Pull complete
|
||||
8ffa7aaef404: Pull complete
|
||||
15132af73342: Pull complete
|
||||
aaf3b07565c2: Pull complete
|
||||
736f7bc16867: Pull complete
|
||||
94da21e53a5b: Pull complete
|
||||
Digest: sha256:e9c35537103a2801a30b15a77d4a56b35532c964489b125ec1ff24f3d5b53409
|
||||
Status: Downloaded newer image for python:3
|
||||
docker.io/library/python:3
|
||||
```
|
||||
</div>
|
||||
|
||||
On remarque que plusieurs téléchargement ont lieu, chacun associé à un
|
||||
identifiant particulier. Une image est généralement découpée en plusieurs
|
||||
éléments. On parle en fait de *couches* puisqu'on les empile, dans un ordre
|
||||
précis.
|
||||
|
||||
Les couches sont une astuce formidable pour optimiser tant le téléchargement,
|
||||
l'espace de stockage nécessaire au cache d'images, que la création des
|
||||
conteneurs. De nombreux conteneurs vont utiliser les mêmes images de base :
|
||||
`debian`, `ubuntu`, `alpine`, ... il serait futile de systématiquement
|
||||
récupérer et stocker autant de systèmes de fichiers de base que d'images. Avec
|
||||
les couches, si deux images partagent la même version du système de fichiers de
|
||||
base, il ne sera téléchargé qu'une seule fois. On pourait le schématiser ainsi :
|
||||
|
||||

|
||||
|
||||
Dans les faits, cela va même encore plus loin car Docker crée de nombreuses
|
||||
couches intermédiaires, chacune peut être l'occasion d'une bifurcation.\
|
||||
|
||||
Chaque couche est en fait un différentiel des dossiers et fichiers qui sont
|
||||
ajoutés, modifiés ou supprimés par rapport à la couche précédente.
|
||||
|
||||
::::: {.question}
|
||||
|
||||
#### Comment supprimer les couches d'images que je n'utilise plus ? {-}
|
||||
|
||||
Docker gère lui-même les couches, vous n'avez pas à vous en préoccuper. Si une
|
||||
image est mise à jour ou supprimée, toutes les couches rendues inutiles seront
|
||||
automatiquement supprimées.
|
||||
|
||||
:::::
|
||||
|
||||
Revenons au *commit* que nous avons fait précédemment. Nous avons ajouté `nano`
|
||||
par-dessus une image `ubuntu`. Naturellement, voici ce qu'il s'est passé :
|
||||
|
||||

|
||||
|
||||
|
|
@ -82,8 +150,13 @@ docker container run -it my_nano /bin/bash
|
|||
```
|
||||
</div>
|
||||
|
||||
Vous constatez cette fois que vous pouvez lancer `nano`, alors que vous ne
|
||||
pouvez toujours pas le faire dans un conteneur issu d'une image `ubuntu` !
|
||||
Vous constatez cette fois que vous pouvez lancer `nano` !
|
||||
|
||||
Nous avons donc créé une couche, elle contient juste le différentiel des
|
||||
fichiers ajoutés, à savoir le binaire `nano` et sa configuration par défaut
|
||||
(mais aussi le cache du gestionnaire de paquets `apt`).
|
||||
|
||||
Voyons maintenant comment automatiser cela.
|
||||
|
||||
|
||||
### Scripté ?
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue