当前位置: 首页 > news >正文

Docker Hub 镜像一键同步至阿里云 ACR


🐳 Docker Hub 镜像一键同步至阿里云 ACR

本脚本用于 从 Docker Hub 拉取镜像并推送到阿里云容器镜像服务(ACR)
它通过 Python 的 docker SDK 封装了完整流程:拉取 → 重命名 → 登录 → 推送,并在控制台实时输出进度日志,方便运维和开发人员快速完成镜像同步。

✨ 功能特点

  • 支持从 Docker Hub 拉取任意镜像(如 nginx:latest
  • 自动重命名为 阿里云 ACR 标准镜像格式
  • 支持 公网地址内网 VPC 地址 两种形式
  • 全过程输出拉取、推送进度,方便排错
  • 命令行参数友好,可灵活调用

🚀 使用方法

  1. 确保本地安装了 Docker 并已启动

  2. 安装依赖:

    pip install docker
    
  3. 执行脚本(例如拉取 nginx:latest):

    python ack-reg-sync.py nginx:latest
    

⚙️ 配置说明

在脚本中可修改以下固定参数:

  • acr_registry:阿里云 ACR 地址(如 registry.cn-shenzhen.aliyuncs.com
  • acr_namespace:命名空间(仓库名)
  • acr_username:阿里云账号或 RAM 用户
  • acr_password:对应密码或临时令牌
import docker
import argparse  # 新增导入def pull_from_dockerhub_and_push_to_acr(dockerhub_image: str,acr_registry: str,acr_namespace: str,acr_username: str,acr_password: str
):"""从 Docker Hub 拉取镜像(显示进度),推送到阿里云 ACR:param dockerhub_image: Docker Hub 镜像名称(如 `nginx:latest`):param acr_registry: 阿里云 ACR 注册表地址(如 `registry.cn-hangzhou.aliyuncs.com`):param acr_namespace: ACR 命名空间(仓库名称):param acr_username: 阿里云账号或 RAM 用户名:param acr_password: 阿里云密码或临时令牌"""# 初始化 Docker 客户端client = docker.from_env()# 1. 从 Docker Hub 拉取镜像(显示进度)print(f"从 Docker Hub 拉取镜像: {dockerhub_image}")pull_logs = client.api.pull(dockerhub_image,stream=True,  # 启用流式输出decode=True   # 解析日志为字典)# 实时显示拉取进度for log in pull_logs:if "progress" in log:print(f"层 {log['id']}: {log['status']} "f"{log['progress'] if 'progress' in log else ''}")else:print(f"{log['status']} {log.get('id', '')}".strip())# 2. 重命名为阿里云 ACR 格式image_with_tag = dockerhub_image.split('/')[-1]target_image = f"{acr_registry}/{acr_namespace}/{image_with_tag}"alias_image = f"registry-vpc.cn-shenzhen.aliyuncs.com/{acr_namespace}/{image_with_tag}"print(f"\n重命名镜像为: {target_image}")image = client.images.get(dockerhub_image)image.tag(target_image)# 3. 登录阿里云 ACRprint("登录阿里云 ACR...")client.login(username=acr_username,password=acr_password,registry=acr_registry)# 4. 推送镜像到阿里云 ACRprint(f"推送镜像到阿里云 ACR: {target_image}")push_logs = client.images.push(target_image,stream=True,decode=True)# 显示推送进度(可选)for log in push_logs:if "error" in log:raise Exception(f"推送失败: {log['error']}")print(log.get("status", ""), log.get("progress", ""))print(f"\n阿里云公网地址为: {target_image}")print(f"\n阿里云内网地址为: {alias_image}")print("\n操作完成!")if __name__ == "__main__":# 配置参数解析器parser = argparse.ArgumentParser(description='从Docker Hub拉取镜像并推送到阿里云ACR')parser.add_argument('dockerhub_image', type=str, help='Docker Hub镜像名称(如 nginx:latest)')# 其他固定参数args = parser.parse_args()# 固定配置的其他参数acr_registry = "registry.cn-shenzhen.aliyuncs.com"  # 阿里云 ACR 地址acr_namespace = "xxxxx"    # ACR 命名空间(仓库名)acr_username = "xxxxxxxxxx"  # 阿里云账号acr_password = "xxxxxxxxxx"  # 密码或临时令牌# 执行操作pull_from_dockerhub_and_push_to_acr(args.dockerhub_image,  # 使用命令行参数acr_registry,acr_namespace,acr_username,acr_password)

在这里插入图片描述

http://www.dtcms.com/a/343944.html

相关文章:

  • 如何在Windows 10/11家庭版安装组策略编辑器
  • nanoGPT 部署
  • 解决 SymPy Lambdify 中的符号覆盖与语法错误问题
  • 本地组策略编辑器图形化工具
  • STM32 - Embedded IDE - GCC - 重定向printf到串口
  • pytorch 网络可视化
  • 网易云音乐歌曲导出缓存为原始音乐文件。低调,低调。。。
  • 爬虫逆向之易盾文字点选分析
  • Kafka消息丢失的场景有哪些
  • 漏洞分析 | Kafka Connect 任意文件读取漏洞(CVE-2025-27817)
  • selenium爬虫
  • 开源 vs 商业 DevOps 平台:如何选择最适合你的方案?
  • Elasticsearch高能指南
  • 学习:uniapp全栈微信小程序vue3后台(3)
  • 嵌入式Linux学习 -- 网络1
  • StarRocks启动失败——修复全流程
  • 姓名重名查询抖音快手微信小程序看广告流量主开源
  • 恢复性测试:定义、重要性及实施方法
  • Linux设备模型交互机制详细分析
  • 分段渲染加载页面
  • 第9课:本地功能集成
  • 宋红康 JVM 笔记 Day06|虚拟机栈
  • Seaborn数据可视化实战:Seaborn数据可视化基础-从内置数据集到外部数据集的应用
  • 学习游戏制作记录(合成表UI和技能树的UI)8.22
  • Python打卡Day49 CBAM注意力
  • 小迪安全v2023学习笔记(六十九讲)—— Java安全JWT攻防监控组件泄露接口
  • 北斗导航 | 基于MCMC粒子滤波的接收机自主完好性监测(RAIM)算法(附matlab代码)
  • 【C++组件】Elasticsearch 安装及使用
  • ODYSSEY:开放世界四足机器人的探索与操控,助力长范围任务
  • ref 简单讲解