web-dev-qa-db-fra.com

Quelle est la difference entre import et load dans Docker?

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?

50
rdupz

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

68
VonC

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.

2
qootec

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.

1
Shreedhar