Je joue avec Docker depuis quelques jours et j'ai déjà fait des images (ce qui était vraiment amusant!). Maintenant, je veux persister dans mon travail et suis arrivé aux commandes save
et export
, mais je ne les comprends pas complètement.
Quelle est la différence entre save
et export
dans Docker?
Réponses:
La réponse courte est:
save
va chercher une image: pour une VM ou un serveur physique, ce serait l'image ou le disque .ISO d'installation. Le système d'exploitation de base.Il emballera les couches et les métadonnées de toute la chaîne requise pour construire l'image. Vous pouvez ensuite charger cette chaîne d'images "enregistrées" dans une autre instance de docker et créer des conteneurs à partir de ces images.
export
récupérera tout le conteneur: comme un instantané d'une VM ordinaire. Enregistre le système d'exploitation bien sûr, mais aussi toute modification que vous avez apportée, tout fichier de données écrit pendant la vie du conteneur. Celui-ci ressemble plus à une sauvegarde traditionnelle.Il vous donnera une archive plate .tar contenant le système de fichiers de votre conteneur.
Edit: comme mon explication peut encore prêter à confusion, je pense qu'il est important de comprendre que l'une de ces commandes fonctionne avec des conteneurs, tandis que l'autre fonctionne avec des images.
Une image doit être considérée comme «morte» ou immuable, en commençant par 0 ou 1000 conteneurs ne modifiera pas un seul octet. C'est pourquoi j'ai fait une comparaison avec une ISO d'installation système plus tôt. C'est peut-être encore plus proche d'un live-CD.
Un conteneur «démarre» l'image et ajoute une couche supplémentaire par-dessus. Cette couche stocke tout changement sur le conteneur (fichiers créés / modifiés / supprimés ...).
la source
docker commit
). Je peux alorssave
l'image. Ou je peuxexport
le conteneur directement. Et les deux manières (save
l'image etexport
le conteneur) auront le même résultat?export
vous donnera une archive plate .tar contenant votre système de fichiers conteneur.save
emballera les couches et les métadonnées de toute la chaîne nécessaire pour construire l'image. Vous pouvez ensuite charger cettesaved
chaîne d'images " " dans une autre instance de docker et créer des conteneurs à partir de ces images.export
fonction.export
toutes les métadonnées seront perdues, donc au cas où vous tenteriez d'exécuter le conteneur avec cette image, vous aurez à réitérer le CMD et d'autres métdonnées.save
a bien fonctionné pour moi mais l'exportation a été pénibleIl existe deux différences principales entre les commandes
save
etexport
.save
La commande enregistre l'image entière avec l'historique et les métadonnées, mais laexport
commande n'exporte que la structure des fichiers (sans historique ni métadonnées). Ainsi, le fichier tar exporté sera plus petit que celui enregistré.Lorsque vous utilisez le système de fichiers exporté pour créer une nouvelle image , puis cette nouvelle image ne contient aucune
USER
,EXPOSE
,RUN
etc. commandes de votre Dockerfile. Seule la structure des fichiers sera transférée. Ainsi, lorsque vous utilisez des mots-clés mentionnés dans votre Dockerfile, vous ne pouvez pas utiliser la commande d'exportation pour transférer l'image vers une autre machine - vous devez toujours utiliser la commande save.la source
L'image exportée n'aura aucune information de calque ou d'historique enregistrée, elle sera donc plus petite et vous ne pourrez pas revenir en arrière.
L'image enregistrée aura des informations de calque et d'historique, donc plus grandes.
Si vous donnez ceci à un client, la question est de savoir si vous souhaitez conserver ces couches ou non?
la source
Techniquement, enregistrer / charger fonctionne avec des référentiels qui peuvent être une ou plusieurs images, également appelées couches. Une image est un seul calque dans un dépôt. Enfin, un conteneur est une image instanciée (en cours d'exécution ou non).
la source
Docker save Produit un référentiel de fichiers tar qui contient toutes les couches parentes, et toutes les balises + versions, ou repo spécifié: balise, pour chaque argument fourni à partir de l' image .
Export Docker Produit un fichier spécifié (peut être tar ou tgz) avec un contenu plat sans contenu des volumes spécifiés à partir de Container .
docker save doit être utilisé sur l'image docker lors de l' exportation de docker doit être utilisé sur le conteneur (tout comme l'image en cours d'exécution)
Enregistrer l'utilisation
Utilisation d'exportation
la source
export
:container (filesystem)
->image tar
.import
:exported image tar
->image
. Une seule couche.save
:image
->image tar
.load
:saved image tar
->image
. Toutes les couches seront récupérées.De Docker in Action, deuxième édition p190.
la source