Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
informatique:docker [2023/11/23 10:42] benoit [Dockerfile] |
informatique:docker [2023/12/07 14:20] (Version actuelle) benoit |
||
---|---|---|---|
Ligne 8: | Ligne 8: | ||
* [[informatique:docker:commitdocker|Créer des images à la volée sous Docker (Commit)]] | * [[informatique:docker:commitdocker|Créer des images à la volée sous Docker (Commit)]] | ||
* [[informatique:docker:dockerfile|Créer des images à partir du Dockerfile]] | * [[informatique:docker:dockerfile|Créer des images à partir du Dockerfile]] | ||
+ | * [[informatique:docker:registrydocker|Les registry sous Docker]] | ||
+ | * [[informatique:docker:confclientdocker|Configuration du client Docker]] | ||
Ligne 24: | Ligne 26: | ||
- | ===== Création d'image sous Docker ===== | ||
- | ==== Docker commit ==== | ||
- | Permet de créer des images à partir d'un conteneur. Il est recommandé de l'utiliser que dans des cas spécifiques. | ||
- | Par exemple dans les cas suivants : | ||
- | * Snapshot ponctuel du conteneur | ||
- | * Faire un fix rapide dans le conteneur mais non durable | ||
- | * Tester et debugguer | ||
- | |||
- | Pour des modifications plus durable, il vaut mieux s'appuyer sur un Dockerfile. | ||
- | |||
- | Pour commencer démarrer un conteneur **debian** qui lance la commande ''sleep infinity'' : | ||
- | docker run -d --name c1 debian sleep infinity | ||
- | |||
- | On peut se connecter au conteneur, y apporter les modifications que l'on souhaite et le quitter, par exemple : | ||
- | docker exec -ti c1 bash | ||
- | echo "toto" > /var/lib/toto.txt | ||
- | ... | ||
- | exit | ||
- | |||
- | On peut donc créer une image de l'état du conteneur ainsi : | ||
- | docker commit c1 myimage-c1:v1.0 | ||
- | |||
- | Avec la commande... | ||
- | docker image ls | ||
- | |||
- | ...On peut voir | ||
- | REPOSITORY TAG IMAGE ID CREATED SIZE | ||
- | myimage-c1 v1.0 0b486f336e68 6 minutes ago 117MB | ||
- | debian latest 0ce03c8a15ec 42 minutes ago 117MB | ||
- | |||
- | On peut de nouveau créer un nouveau conteneur à partir de cette image ainsi : | ||
- | docker run -d --name c2 myimage-c1:v1.0 | ||
- | |||
- | En listant les processus Docker en fonctionnement... | ||
- | docker ps | ||
- | |||
- | ...On constate que les 2 conteneurs sont en fonctionnement avec la commande ''sleep infinity'' : | ||
- | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES | ||
- | a9b8064f9bcb myimage-c1:v1.0 "sleep infinity" About a minute ago Up About a minute c2 | ||
- | 1600fa08b0a1 debian "sleep infinity" 12 minutes ago Up 12 minutes c1 | ||
- | |||
- | :!: Pourtant le conteneur c2 n'a pas été lancé avec la commande ''sleep infinity''. Ceci montre que la création de l'image prend en compte les processus actifs. Ces mêmes processus seront actif lorsqu'un conteneur est créé à partir de l'image "commitée". | ||
- | |||
- | On peut ajouter d'autres options pour créer l'image, comme un commentaire et ajouter l'auteur de l'image : | ||
- | docker commit --message "mes commentaires" --author "Benoit" c1 myimage-c1:v1.1 | ||
- | |||
- | On peut retrouver ces informations ainsi dans l'image : | ||
- | docker inspect -f "{{.Author}} {{.Comment}}" myimage-c1:v1.1 | ||
- | |||
- | On peut lister l'historique des commit d'une image ainsi : | ||
- | docker history myimage-c1:v1.1 | ||
- | | ||
- | Exemple de résultat : | ||
- | IMAGE CREATED CREATED BY SIZE COMMENT | ||
- | a1b6eff85cc8 8 minutes ago sleep infinity 76B mes commentaires | ||
- | 0ce03c8a15ec About an hour ago /bin/sh -c #(nop) CMD ["bash"] 0B | ||
- | <missing> About an hour ago /bin/sh -c #(nop) ADD file:39d17d28c5de0bd62… 117MB | ||
- | |||
- | On peut ajouter des modifications/instructions à lancer pour notre image. Par exemple on ajoute un variable d'environnement ''MYVAR=Benoit'' : | ||
- | docker commit --change "ENV MYVAR=Benoit" c1 myimage-c1:v1.2 | ||
- | |||
- | Lorsque l'on créé un conteneur à partir de cette nouvelle image on constate que la variable est bien active : | ||
- | docker run -d --name c3 myimage-c1:v1.2 | ||
- | docker exec c3 env | ||
- | |||
- | Résultat : | ||
- | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin | ||
- | HOSTNAME=1f8770a8bb5b | ||
- | MYVAR=Benoit | ||
- | HOME=/root | ||