docker-我们如何仅导出/导入(或保存/加载)新更改?

docker-我们如何仅导出/导入(或保存/加载)新更改?,docker,docker-compose,dockerfile,virtualization,Docker,Docker Compose,Dockerfile,Virtualization,我是docker的新手,有人能帮我回答下面的问题吗 服务器有一个类似1GB映像的docker映像:ver1[此映像在服务器中存储有.tar文件] 在ubuntu中,PC不加载tar图像表单服务器,并使用Docker加载/导入图像[image:ver1] 新图像:Serever上提供了ver2,大小仍为1GB,但与ver1的差异仅为10MB 问题1:如果可以从服务器“导入/加载”新映像[image:ver2],我们如何仅导出/导入(或保存/加载)新更改[即10MB] 问题2:如果我们能够将上述更改

我是docker的新手,有人能帮我回答下面的问题吗

  • 服务器有一个类似1GB映像的docker映像:ver1[此映像在服务器中存储有.tar文件]
  • 在ubuntu中,PC不加载tar图像表单服务器,并使用Docker加载/导入图像[image:ver1]
  • 新图像:Serever上提供了ver2,大小仍为1GB,但与ver1的差异仅为10MB
  • 问题1:如果可以从服务器“导入/加载”新映像[image:ver2],我们如何仅导出/导入(或保存/加载)新更改[即10MB]


    问题2:如果我们能够将上述更改应用于现有图像的顶部[e.e:image:Ver1],那么步骤是什么

    Docker是一个基于文件的系统,对于每个Pull请求,它只提取更改的文件。例如,假设docker映像中的文件中有1GB数据。现在,您向其中添加了500MB的数据。然后,在docker pull的情况下,它将仅拉动更改,即两个文件之间的增量部分。所以,你是安全的,它不会把所有的东西分开拉

    尽管如此,在创建DockerFile或docker conf文件时,您应该非常小心,因为docker文件中的所有行都存储为系统中的一个层。如果您的Docker文件中有10个层,并且您正在更改第5层,那么第5层之后的所有层都将再次被拖动。这是使用Docker的唯一问题。
    Rest,它将始终为每个拉取请求拉取更改增量。

    如果要保存/加载docker映像的tar文件,则无法导出部分映像。您可以发送完整映像,将数据移动到不以这种方式传输的外部卷,或者使用docker注册表

    后者相对容易实现,docker包括可以运行自己的私有注册表的地方。推拉到docker注册表只会发送更改的层,因此您可以使用层缓存并构建docker文件,以最大限度地减少更改的层数。

    好的,我已经构建了用于创建docker图像版本(逐层)的差异(顶层)的tarball,并在以后将原始图像充气

    注意。仅适用于顶层的更改

    四步流程:

  • docker inspect->将旧层哈希作为json文件生成json
  • 根据新图像和旧(现有)层的哈希值准备差异
  • 将差异传输到目标机器
  • 基于差分和旧图像的目标图像焦油膨胀

  • 感谢您的回复,我了解您关于推拉式docker命令的回复,我只查询导出/导入、保存/加载命令例如:感谢您的回复,我了解推拉式docker命令,我只查询导出/导入、保存/加载命令例如:下载的图像[image_ver1.tar]来自服务器docker load的文件