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

时间:2017-04-10 10:32:50

标签: docker docker-compose dockerfile virtualization

我是docker的新手,可以为下面的查询提供任何帮助

  1. 服务器有一个像1GB这样的泊坞窗图像:ver1 [此图像存储在服务器中有.tar文件]
  2. 在ubuntu PC下载了tar图像表单服务器并使用Docker加载/导入图像[Image:ver1]
  3. 新的图片:Serever上有ver2版本,尺寸仍为1GB,但与ver1的差异仅为10MB。
  4. Q1:如果可以从服务器“导入/加载”新图像[Image:ver2],我们如何只导出(或保存/加载)新的更改[即10MB]?

    Q2:如果我们能够对现有图像进行上述更改[即图片:Ver1],有哪些步骤可以做?

3 个答案:

答案 0 :(得分:1)

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

虽然在制作DockerFile或docker conf文件时,您应该非常小心,因为Docker文件中的所有行都存储为系统中的一个层。如果假设您的Docker文件中有10个图层,并且您要更改第5个图层,则将再次拉出第5个图层之后的所有图层。这是使用Docker的唯一问题。 休息时,它将始终为每个拉取请求拉出更改的增量。

答案 1 :(得分:0)

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

后者相对容易实现,docker包含an image,您可以在其中运行自己的私有注册表。推送到docker注册表只会发送更改的图层,因此您可以使用图层缓存并构建Dockerfiles以最小化更改的图层数。

答案 2 :(得分:0)

好吧,我已经构建了tool来创建tar映像的docker映像版本(逐层)的差异(在顶层),并在以后膨胀原始映像。

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

四步过程:

  1. docker inspect->将具有旧图层哈希值的json作为json文件
  2. 根据新图像和旧(现有)图层的哈希值准备差异
  3. 将差异传输到目标计算机
  4. 基于差异和旧图像为目标图像添加tar