Gri*_*fin 2 docker docker-registry
一.这是我创建图像的方式:
乙.从另一台机器我拉,改变并推动它:
现在我看到的问题是,每次重复B时,它都会尝试将~600MB(这是公共图像层)上传到注册表,这在我的情况下需要很长时间.
有没有办法避免上传整个600MB,而是推送唯一已更改的目录?
我究竟做错了什么?你们如何使用docker进行频繁推送?
Docker只会推送更改的图层,因此看起来您工作流程中的某些内容不太合适.如果你使用a会更清楚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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,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
Run Code Online (Sandbox Code Playgroud)
当我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
Run Code Online (Sandbox Code Playgroud)
因此,如果您的推送正在上传600MB,那么您要么对图像进行600MB更改,要么您的工作流程阻止Docker正确使用图层.
| 归档时间: |
|
| 查看次数: |
2842 次 |
| 最近记录: |