Je comprends la différence entre export
(pour les conteneurs) et save
(pour les images). Mais à la fin de la journée, l'archive produite par sauvegarde ou exportation doit être utilisée comme ne image.
Alors pourquoi existe-t-il 2 commandes pour créer une image à partir d'une archive tarball?
docker save
va effectivement produire une archive, mais avec tous les calques parents, et tous les tags + versions.
docker export
produit également une archive, mais sans couche ni historique.
Il est souvent utilisé quand on veut "aplatir" une image , comme illustré dans " Aplatir un conteneur ou une image Docker " de Thomas Uhrig :
docker export <CONTAINER ID> | docker import - some-image-name:latest
Cependant, une fois que ces archives sont produites, le chargement/importation permet de:
docker import
crée un image à partir de un tarball qui est même pas une image (juste un système de fichiers de votre choix) importer en tant qu'image)Créez une image de système de fichiers vide et importez le contenu de l'archive.
docker load
crée potentiellement plusieurs images à partir d’un dépôt taré (depuis docker save
peut enregistrer plusieurs images dans une archive).Charge un référentiel taré à partir d'un fichier ou du flux d'entrée standard
En tant que débutant chez Docker, j’ai appris cette différence à la manière dure.
Sur un système:
docker run -it myImage /bin/bash
-> Fonctionne bien
Sur ce même système:
docker **save** myImage -o myImage.tar
Sur le deuxième système:
docker **import** myImage.tar
-> Fonctionne bien, pas de problème, il suffit d'un tag:
docker tag _the_assigned_tag myImage
Sur ce second système:
docker run -it myImage /bin/bash
docker: réponse d'erreur du démon: la création du moteur d'exécution OCI a échoué: conteneur_linux.go: 345: le démarrage du processus de conteneur a provoqué "exec: \"/bin/bash\": stat/bin/bash: aucun fichier ni répertoire" : inconn.
La recherche de cette erreur m'a amené à toutes sortes de raisons telles que MountFlags="slave"
, mais la vraie raison s’est avérée être celle décrite dans ce post: j’aurais dû utiliser load au lieu d’import. Ne sachant pas ce qui se passait, le message d'erreur de Docker ne m'a aucunement mis sur la bonne voie pour la cause "d'importation", jusqu'à ce que je tombe par hasard sur ce post.
importation de menu fixe est principalement utilisé avec une archive tar créée à partir d'un conteneur en cours d'exécution. Pour P. docker export conteneurID> /home/cntr.tar puis importez cette archive dans une image, par exemple. docker import /home/cntr.tar mynewimage: tag
Considérant que charge du menu fixe est utilisé pour charger l’image à partir d’une archive tar créée à partir d’une autre image. Pour P. sauvegarde du menu fixe> /home/fromimg.tar puis rechargez-le avec charge du menu fixe </home/fromimg.tar
la principale différence entre la sauvegarde et le chargement de dockers avec une image conserve l’historique des images. Considérant que docker export/import avec conteneur aplatit l'image en supprimant tout l'historique du conteneur.