会影响,而且很可能拖慢整体:docker push 基本受 上行带宽/registry 吞吐 限制,3 个 10GB 镜像一并跑会把带宽占满,导致其他 300MB 的小镜像也被“挤”得很慢,甚至触发超时/限流。
更好的做法是:分级并发(大镜像低并发、小镜像高并发),或先推小的再推大的。
推荐策略
1) 大镜像串行(1 并发),小镜像并行(例如 4~8 并发)
- 先把 300MB 的快速推完,提升总体完成时间与成功率
- 10GB 的同时只推 1 个(或最多 2 个,视带宽)
2) 如果必须混跑:最多同时 1 个大镜像 + N 个小镜像
这样既不让大镜像完全独占,也不把链路打爆。
一个简单可用的做法(按文件大小分组)
假设 tar 在目录里(大于 2GB 认为“大”),先小后大:
# 小包并行推(可调 -P)
find . -maxdepth 1 -name "*.tar" -size -2G -print0 |
xargs -0 -n 1 -P 6 -I {} bash -lc '
set -e
out=$(docker load -i "{}")
img=$(echo "$out" | awk "/Loaded image:/ {sub(\\"Loaded image: \\",\\"\\",$0); print $0}")
docker push "$img"
'
# 大包串行推
find . -maxdepth 1 -name "*.tar" -size +2G -print0 |
xargs -0 -n 1 -P 1 -I {} bash -lc '
set -e
out=$(docker load -i "{}")
img=$(echo "$out" | awk "/Loaded image:/ {sub(\\"Loaded image: \\",\\"\\",$0); print $0}")
docker push "$img"
'
如果你的 docker load 输出没有 Loaded image:(只有 image ID),这段需要改成“用清单映射 tar->tag”的方式。
并发怎么选(经验值)
- 上行带宽一般:小镜像 -P 4~8;大镜像 -P 1
- registry 有限流/负载小:整体并发降到 2~4
网硕互联帮助中心



评论前必须登录!
注册