В чем разница между импортом и загрузкой в 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 с контейнером выравнивает изображение, удаляя всю историю контейнера.