В чем разница между импортом и загрузкой в ​​Docker?

Я понимаю разницу между export (для контейнеров) и save (для изображений). Но в конце дня tarball, созданный либо сохранением, либо экспортом, должен использоваться как изображение.

Итак, почему есть 2 команды для создания изображения из tarball?

Ответ 1

docker save действительно создаст тарбол, но со всеми родительскими слоями и всеми тегами + версиями.

docker export также создает тарбол, но без какого-либо слоя/истории.

Это часто используется, когда кто-то хочет "сгладить" изображение, как показано в " Свести контейнер Docker или изображение " от Томаса Урига:

docker export <CONTAINER ID> | docker import - some-image-name:latest

Однако после того, как эти tarballs произведены, загрузка/импорт доступны для:

  • docker import создает одно изображение из одного архива, которое даже не является изображением (просто файловая система, которую вы хотите импортировать как изображение)

Создайте пустой образ файловой системы и импортируйте содержимое архива

  • docker load создает потенциально несколько изображений из репозитория tarred (так как docker save может сохранить несколько изображений в tarball).

Загружает репозиторий tarred из файла или стандартного потока ввода

Ответ 2

Как новичок в докере, я с трудом усвоил эту разницу.

  • На одной системе:

    docker run -it myImage /bin/bash
    

    → Работает нормально

  • В той же системе:

    docker **save** myImage -o myImage.tar
    
  • На второй системе:

    docker **import** myImage.tar
    

    → Работает хорошо, никаких проблем, просто необходим тег:

    docker tag _the_assigned_tag myImage
    
  • В этой второй системе:

    docker run -it myImage /bin/bash
    

    docker: Ошибка ответа от демона: Ошибка создания среды выполнения OCI: container_linux.go: 345: запуск процесса контейнера вызвал "exec: \"/bin/bash\": stat/bin/bash: такого файла или каталога нет: неизвестно.

Поиск этой ошибки привел меня к разным причинам, таким как MountFlags="slave", но настоящей причиной оказалась та, которая описана в этом посте: я должен был использовать load вместо import. Не зная, что происходит, сообщение об ошибке Docker ни в каком смысле не помогло мне найти причину "импорта", пока я не наткнулся на этот пост.

Ответ 3

Импорт docker в основном используется с тарболлом, который создается из запущенного контейнера. Например, docker export containerID>/home/cntr.tar, а затем импортировать этот tarball в образ. Например. импорт докера /home/cntr.tar mynewimage: тег

Принимая во внимание, что загрузка докера используется для загрузки изображения из архива, созданного из другого изображения. Например, сохранить в докере>/home/fromimg.tar, затем загрузить его с загрузкой докера </home/fromimg.tar

главное отличие в том, что docker save/load with image сохраняет историю изображений. Принимая во внимание, что экспорт/импорт docker с контейнером выравнивает изображение, удаляя всю историю контейнера.