Docker中的导入和加载之间有什么区别?


71

我了解export(对于容器)和save(对于图像)之间的区别。但最终,保存或导出产生的压缩包都应用作图像

那么,为什么有2条命令可以从压缩包制作图像呢?

Answers:


100

docker save确实会产生一个tarball,包含所有父图层以及所有标签+版本。

docker export 也会产生压缩包,但没有任何层/历史记录。

当人们想要“展平”映像时,通常使用它,如Thomas Uhrig的“展平Docker容器或映像所示

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

但是,一旦生成了这些压缩包,就可以进行加载/导入:

  • docker import一个tarball创建一个图像,甚至不是图像(只是要导入为图像的文件系统)

创建一个空的文件系统映像并导入tarball的内容

  • docker load从一个有问题的存储库创建潜在的多个图像(因为docker save可以在一个tarball中保存多个图像)。

从文件或标准输入流中加载已tartar的存储库


docker image import的同义词docker import吗?
masterxilo

考虑到语法docker image仅在以后出现,可能是(我在用手机)。
VonC

1
是的,那就是确切的区别。只是要添加,因为docker import或docker image import从文件系统创建映像,所以可以更改/提供入口点,cmd,运行等。保留了图层和其他历史记录信息的图像。
萨拉巴德(Saurabhcdt)

我们可以将docker映像另存为没有相关基础层的tar吗?我有基于nodejs图像的nodejs图像,当我保存我的图像时,由于使用了nodejs基本图像层,因此大小为800mb。有没有什么办法将图像导出无底座图像
纳迪尔拉斯卡尔

1
@NadirLaskar否:请在github.com/moby/moby/issues/8039中请求。有一种解决方法:github.com/moby/moby/issues/8039#issuecomment-480121360,但是它可能不适用于您的特定用例。
VonC

15

作为Docker新手,我很难学到这种差异。

  • 在一个系统上:

    docker run -it myImage /bin/bash
    

    ->工作正常

  • 在同一系统上(使用save):

    docker save myImage -o myImage.tar
    
  • 在第二个系统上(使用import):

    docker import myImage.tar
    

    ->效果很好,没有问题,只是需要标记:

    docker tag _the_assigned_tag myImage
    
  • 在第二个系统上:

    docker run -it myImage /bin/bash
    

    泊坞窗:来自守护程序的错误响应:OCI运行时创建失败:container_linux.go:345:启动容器进程引起“ exec:\” / bin / bash \”:stat / bin / bash:无此类文件或目录”:未知

寻找该错误使我有各种原因,例如MountFlags="slave",但是真正的原因却是本文中描述的原因:我应该使用load而不是import。不知道发生了什么,Docker的错误消息并没有使我对“导入”原因有任何了解,直到我偶然发现了这篇文章。


1
哈哈,谢谢,这个确切的错误使我从认证考试失败中花费了400美元。不会再犯此错误
Freedom_Ben

2

docker import通常与从正在运行的容器中创建的tarball一起使用。例如 docker export containerID> /home/cntr.tar然后将这个tarball导入到图像中。docker导入/home/cntr.tar mynewimage:tag

docker load用于从另一个映像创建的tarball加载映像。例如 docker save> /home/fromimg.tar然后使用docker load </home/fromimg.tar将其重新加载

尽管docker用图像保存/加载的主要区别是确实保留了图像历史记录。码头工人使用容器导出/导入通过删除容器的所有历史记录来使图像变平。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.