Docker 只会推送更改的层,因此看起来您的工作流程中的某些内容不太正确。如果你使用Dockerfile 会更清楚,因为每条指令都会显式创建一个层,但即使使用docker commit,结果也应该是一样的。
示例 - 从 ubuntu 映像运行容器并运行 apt-get update,然后将容器提交到新映像。现在运行docker history,您将看到新图像在 bash 图像之上添加了一个层,该层具有运行 APT 更新的附加状态:
> docker history sixeyed/temp1
IMAGE CREATED CREATED BY SIZE COMMENT
2d98a4114b7c About a minute ago /bin/bash 22.2 MB
14b59d36bae0 7 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
<missing> 7 months ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 1.895 kB
<missing> 7 months ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic 194.5 kB
<missing> 7 months ago /bin/sh -c #(nop) ADD file:620b1d9842ebe18eaa 187.8 MB
在这种情况下,ubuntu 和我的temp1 图像之间的差异是 22MB 层 2d98。
现在如果我从temp1 运行一个新容器,创建一个空文件并运行docker commit 来创建一个新图像,新层只有更改后的文件:
> docker history sixeyed/temp2
IMAGE CREATED CREATED BY SIZE COMMENT
e9ea4b4963e4 45 seconds ago /bin/bash 0 B
2d98a4114b7c About a minute ago /bin/bash 22.2 MB
14b59d36bae0 7 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
<missing> 7 months ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 1.895 kB
<missing> 7 months ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic 194.5 kB
<missing> 7 months ago /bin/sh -c #(nop) ADD file:620b1d9842ebe18eaa 187.8 MB
当我push 第一个图像时,只有 22MB 的层会被上传 - 其他的从 ubuntu 安装,它已经在 Hub 中。如果我推送第二个图像,则只会推送更改的图层 - temp1 图层是从第一次推送中安装的:
> docker push sixeyed/temp2
The push refers to a repository [docker.io/sixeyed/temp2]
f741d3d3ee9e: Pushed
64f89772a568: Mounted from sixeyed/temp1
5f70bf18a086: Mounted from library/ubuntu
6f32b23ac95d: Mounted from library/ubuntu
14d918629d81: Mounted from library/ubuntu
fd0e26195ab2: Mounted from library/ubuntu
因此,如果您的推送上传了 600MB,那么您要么对映像进行了 600MB 的更改,要么您的工作流程阻止了 Docker 正确使用层。