2017-10-15 20:49:27 +00:00
|
|
|
\newpage
|
|
|
|
|
|
|
|
Modification interactive
|
|
|
|
========================
|
|
|
|
|
2018-10-04 03:46:47 +00:00
|
|
|
Pour créer une image, commençons par entrer dans un nouveau conteneur :
|
|
|
|
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
```bash
|
|
|
|
docker container run -it ubuntu /bin/bash
|
2018-10-04 03:46:47 +00:00
|
|
|
```
|
|
|
|
</div>
|
|
|
|
|
2017-10-15 20:49:27 +00:00
|
|
|
Nous voilà maintenant dans le conteneur ! Il est assez épuré, il n'y a rien de
|
|
|
|
superflu : même pas d'éditeur de texte : ni vim, ni emacs, même pas `vi` !
|
|
|
|
|
|
|
|
La première chose à faire est de télécharger la liste des paquets. En effet,
|
|
|
|
afin de ne pas livrer de superflu, la liste des paquets et son cache ne sont
|
2017-10-16 20:59:22 +00:00
|
|
|
pas incluses dans le conteneur.
|
2017-10-15 20:49:27 +00:00
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
```bash
|
|
|
|
apt-get update
|
2017-10-15 20:49:27 +00:00
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
</div>
|
2017-10-15 20:49:27 +00:00
|
|
|
|
|
|
|
Il peut arriver que des paquets présents dans l'image ne soient pas à
|
2021-09-21 09:44:12 +00:00
|
|
|
jour. De manière générale, il n'est pas recommandé de faire de mises à
|
|
|
|
jour automatiques et systématiques des éléments présents dans l'image,
|
|
|
|
à l'exception des mises à jour de sécurité[^SECURITY_UPDATE]. En effet, une mise à jour
|
|
|
|
qui apporte des changements peut altérer le comportement du conteneur,
|
|
|
|
en fonction de la date à laquelle on le construit.
|
|
|
|
|
|
|
|
[^SECURITY_UPDATE]: Voir cet article :
|
|
|
|
<https://pythonspeed.com/articles/security-updates-in-docker/>
|
|
|
|
|
|
|
|
Si vous souhaitez disposez d'une nouvelle version de l'image, il est
|
|
|
|
plutôt recommandé de contacter le mainteneur de l'image pour qu'il la
|
|
|
|
mette à jour, en utilisant un nouveau tag s'il le juge nécessaire.
|
2017-10-15 20:49:27 +00:00
|
|
|
|
|
|
|
Installons maintenant un programme :
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
```bash
|
|
|
|
apt-get install nano
|
2017-10-15 20:49:27 +00:00
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
</div>
|
2017-10-15 20:49:27 +00:00
|
|
|
|
2021-09-21 09:44:12 +00:00
|
|
|
Lorsque l'installation de `nano` est terminée, quittons l'image en tapant
|
2017-10-15 20:49:27 +00:00
|
|
|
`exit`.
|
|
|
|
|
2021-09-21 09:44:12 +00:00
|
|
|
Sauvegardons nos modifications en tant que nouvelle image Docker, avec
|
2018-10-18 05:05:36 +00:00
|
|
|
la commande `commit` :
|
2017-10-15 20:49:27 +00:00
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
```bash
|
|
|
|
docker container commit CONTAINER my_nano
|
2017-10-15 20:49:27 +00:00
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
</div>
|
2017-10-15 20:49:27 +00:00
|
|
|
|
2018-10-18 05:05:36 +00:00
|
|
|
en remplaçant `CONTAINER` 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`.
|
|
|
|
|
2020-09-14 13:46:13 +00:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
![`docker commit`](commit.png)
|
|
|
|
|
|
|
|
Testons alors sans plus attendre notre nouvelle image :
|
2017-10-15 20:49:27 +00:00
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
```bash
|
|
|
|
docker container run -it my_nano /bin/bash
|
2017-10-15 20:49:27 +00:00
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
</div>
|
2017-10-15 20:49:27 +00:00
|
|
|
|
|
|
|
Vous constatez cette fois que vous pouvez lancer `nano`, alors que vous ne
|
2017-10-16 20:59:22 +00:00
|
|
|
pouvez toujours pas le faire dans un conteneur issu d'une image `ubuntu` !
|
2020-10-28 22:16:34 +00:00
|
|
|
|
|
|
|
|
|
|
|
## Scripté ?
|
|
|
|
|
|
|
|
On peut automatiser les étapes ci-dessus avec un script qui ressemblerait à ça :
|
|
|
|
|
|
|
|
<div lang="en-US">
|
|
|
|
```bash
|
|
|
|
docker container run ubuntu apt-get update
|
|
|
|
docker container commit $(docker container ls -lq) my_nano_step-1
|
|
|
|
docker container run my_nano_step-1 apt-get install nano
|
|
|
|
docker container commit $(docker container ls -lq) my_nano
|
|
|
|
```
|
|
|
|
</div>
|
|
|
|
|
|
|
|
On obtiendra de la même manière notre image `my_nano` :
|
|
|
|
|
|
|
|
<div lang="en-US">
|
|
|
|
```bash
|
|
|
|
docker container run -it my_nano /bin/bash
|
|
|
|
```
|
|
|
|
</div>
|
|
|
|
|
|
|
|
Contenant notre éditeur de texte favori.
|