如何将Docker Hub上Demisto的最新Docker镜像批量复制到Nexus
Docker Hub demisto用户仓库批量同步到Nexus操作方案
针对200+镜像批量迁移的需求,不需要逐个拉取到本地再推送,可以直接通过跨Registry同步工具实现,操作步骤如下:
前置准备
- 提前安装
skopeo、jq工具,需要并行加速可以额外安装parallel - 分别完成Docker Hub、Nexus Docker仓库的登录认证,确保账号有对应仓库的读写权限
- Nexus端提前创建好Docker hosted类型的存储仓库,用于存放同步后的demisto镜像
方案1:轻量脚本实现(仅同步latest标签)
该方案无需额外配置,直接通过命令行即可完成,且不需要占用本地磁盘存储镜像中间文件。
- 首先拉取demisto用户下全部公共仓库列表
USERNAME="demisto" PAGE=1 REPO_LIST=() # 处理分页拉取所有仓库名 while true; do RESP=$(curl -s "https://hub.docker.com/v2/repositories/${USERNAME}/?page_size=100&page=${PAGE}") REPOS=$(echo "${RESP}" | jq -r '.results[].name') if [ -z "${REPOS}" ]; then break fi REPO_LIST+=(${REPOS}) PAGE=$((PAGE+1)) done
- 批量同步镜像到Nexus
# 替换为你实际的Nexus Docker仓库地址 NEXUS_REGISTRY="nexus.example.com:5000" for REPO in "${REPO_LIST[@]}"; do # --all参数会自动同步多架构镜像的完整manifest列表,不需要可以去掉 skopeo copy --all docker://docker.io/${USERNAME}/${REPO}:latest docker://${NEXUS_REGISTRY}/${USERNAME}/${REPO}:latest done
如果需要并行加速,可以把循环替换为parallel调用,同步效率可以提升数倍。
方案2:专业同步工具实现(支持自定义规则)
如果需要同步全量标签、过滤特定镜像、定时同步等更复杂的需求,可以使用regsync工具,仅需要编写配置文件即可实现:
- 编写同步配置文件
regsync.yaml
version: 1 src: registry: docker.io auth: username: "你的Docker Hub账号" password: "你的Docker Hub密码" dst: registry: "nexus.example.com:5000" auth: username: "你的Nexus账号" password: "你的Nexus密码" sync: - source: demisto/* target: demisto/ tags: allow: - latest # 仅同步latest标签,要同步所有标签可以把tags段全部删掉
- 执行同步命令
# 干跑预览同步内容,确认无误后去掉--dry-run参数执行实际同步 regsync once -c regsync.yaml --dry-run
注意事项
- Docker Hub匿名用户有6小时200次的拉取限流,建议使用登录后的认证账号拉取,避免同步被中断
- 同步前建议先执行干跑命令预览同步列表,确认符合预期后再执行实际同步
- Nexus端需要关闭对应仓库的不可变标签配置,避免最新版本镜像推送被拒绝
内容的提问来源于stack exchange,提问作者LordRazon
相关产品推荐
相关产品推荐

