Docker images

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Modèle immuable en couches servant à instancier des conteneurs
Construction recommandée Dockerfile
Construction ponctuelle docker commit sur un conteneur modifié à la main
Voir aussi Dockerfile · Docker containers · Docker

Une image Docker est un modèle en lecture seule, organisé en couches (layers), à partir duquel un ou plusieurs conteneurs peuvent être instanciés. Chaque instruction utilisée pour construire l'image (typiquement via un Dockerfile) crée une couche distincte, versionnée indépendamment ; les couches communes à plusieurs images sont partagées sur le disque, ce qui limite la consommation d'espace et accélère les téléchargements.

Construire une image à partir d'un conteneur (docker commit)

En dehors d'un Dockerfile — l'approche recommandée pour une construction reproductible et versionnable — il est possible de figer l'état d'un conteneur modifié à la main en nouvelle image avec docker commit. C'est rapide, mais l'image obtenue ne conserve pas les métadonnées de construction (pas d'historique d'instructions réutilisable, pas de traçabilité du « comment ») :

docker run -d --name c3 debian:latest sleep infinity
docker commit c3 myimage:v1.0.0

docker image ls
docker images

docker run -d --name c4 myimage:v1.0.0

# avec message et auteur
docker commit --message "ajout version" --author me c3 myimage:v1.0.0

# ajouter une variable d'environnement sur la nouvelle couche
docker commit --change "ENV VAR1=production" --message "ajout version" --author me c3 myimage:v1.0.1

Historique et inspection

docker history b2087fa65132
docker image history b2087fa65132

docker image inspect nginx:1.14.0 --format "{{.Architecture}} {{.Os}}"

Nettoyage

# vue d'ensemble de l'espace disque utilisé par Docker
docker system df -v

# supprimer une image précise
docker image rm nginx:1.14.0
docker image rmi nginx:1.14.0

# supprimer les images non référencées par un conteneur
docker image prune

# variante non interactive, avec filtre de date
docker image prune -a --force --filter "until=2017-01-04T00:00:00"

Aplatir une image (flattening)

Il est possible de réduire une image à un seul layer en l'exportant en tant que système de fichiers plat puis en la réimportant. Cette opération fait perdre l'historique des couches (et donc le bénéfice du cache de build et du partage de couches entre images) : à réserver à des cas particuliers (réduction de taille finale d'une image déjà stabilisée, nettoyage de métadonnées) plutôt qu'à un usage systématique.

docker export ID_Image > flat.tar
cat flat.tar | docker import - flat:latest

docker image history flat

Voir aussi