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

DockerHub被封禁,怎么将镜像传到国内?一种简单合规的镜像同步到国内方案[最佳实践]

图片

Docker将容器化技术普及,推动云计算向云原生的演进。Docker的核心创新技术之一是容器镜像,它是一种文件的打包方式,将应用程序运行的操作系统、库、运行环境等依赖全部打包一起。在其他任意环境,只要可以运行docker服务,就可以基于该镜像运行容器,即业务程序。

与GitHub托管代码的定位类似,Docker Hub 是一个开放性的容器镜像托管平台。由于其是最早的在线镜像存储和分发的平台,绝大多数的开源项目镜像都在该平台上托管。

容器镜像本质还是对文件的一种组织管理方式,具有传播数据和信息的能力,因此对于其分发的文件内容需要符合地方的法律法规,在没有完成合规的要求前应该无法直接面向国内提供服务。

鉴于DockerHub是绝对权威和全面的容器镜像托管平台,无法使用托管在该平台上优质的镜像,绝对是国内信息科技业的重大损失。

一种简单合规的镜像同步到国内方案

该方案核心是基于 GitHub Action功能,通过触发Action流水线执行容器镜像的拉取和推送。(GitHub目前可访问:Github是否在调试和预演封禁中国IP用户?我们又该怎样应对?)

藏云阁 ImageToTo 开源项目(https://gitea.cncfstack.com/cncfstack/imagetoto)就是该方案的实现,大家也可以通过提交issue或在论坛,或微信群反馈需要同步的镜像,合并 push 时就会自动同步。

ImageToTo项目核心代码只有 Action 中的 10 来行代码。

源代码如下:


name: imageToTo
on:push:branches: [ "main" ]workflow_dispatch:
jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4- name: Run a multi-line scriptrun: |sudo docker login  --username=${{ secrets.HARBOR_USER }} --password=${{ secrets.HARBOR_PWD }} harbor.cloud.cncfstack.comfor img in `cat image.list`dosudo docker pull $imgif [ $? -ne 0 ];thenecho "pull error $img" >>  tmpfilecontinuefisudo docker tag $img harbor.cncfstack.com/$imgsudo docker push harbor.cncfstack.com/$imgdoneif [ -f tmpfile ];thencat tmpfilefi

源代码的逻辑

  1. 登陆国内镜像仓库

  2. 用Github Action流水线 docker pull 拉取镜像

  3. 通过 docker tag 将镜像tag修改为国内镜像仓库的地址信息

  4. 执行 docker push 将镜像推送到国内镜像仓库。

这个项目在配置时有两点需要注意,image.list 文件中填写 DockerHub 的镜像完整地址和国内镜像仓库的密码安全保密问题。

关于image.list 文件中填写 DockerHub 的镜像完整地址,主要是考虑项目的兼容性,因为到目前为止实际上已经有多个镜像托管平台了,如 Google 的gcr.io,Github的 ghcr.io ,以及一些开源项目自建的镜像仓库。

# cat image.list 
docker.io/library/nginx:1.26

另外一个需要注意的就是国内镜像仓库的账号和密码需要保密,这是通过Github的 secrets 配置管理的。

#组织或项目settings
->settings->security->secrets and variables->Actions->secrets

配置后只能通过Action执行流水线时读取使用,用户在管理页面和流水线日志中都无法查看该 secret 内容信息。配置示例:

图片

在项目的 Action 文件中使用如下语法应用

--password=${{ secrets.HARBOR_PWD }}

通过在 image.list 中添加镜像地址列表,执行 push 后在国内的镜像仓库中就可以查看和使用了。

如图是国内 Harbor 的日志信息,说明镜像已经成功推送过来了。

图片

在使用时,只需要在镜像前面添加国内镜像仓库地址即可拉取镜像

docker pull harbor.cncfstack.com/docker.io/library/nginx:1.26

图片

关于国内镜像仓库的选择

镜像仓库可以选择公有云的“容器镜像服务”,开箱即用。但是在实际使用时“个人免费版本”无法使用完整功能,会有很多限制。

最无法接受的就是“多级仓库目录”无法使用,该功能限制会直接导致脚本兼容性极差。

图片

所以,经过分析评估还是选择基于开源 Harbor 搭建企业私有的容器镜像仓库相对合适。当然,如果企业有采购公有云的容器镜像仓库服务企业版本,也是可以的。

使用 Harbor 搭建的镜像仓库可以创建很多不同的项目来区分不同镜像托管平台,也没有目录层级等限制,如图示例

图片

关于 Harbor 仓库的安装部署实际非常简单,后续的文章会进行快捷部署的介绍。

http://www.xdnf.cn/news/7775.html

相关文章:

  • KLEC--基于知识学习的演化计算算法
  • 硬盘健康检测与性能测试的实践指南
  • 【AI助手】提升开发效率:Continue配置自定义提示词模板及规则
  • 白皮精读:109页数据资源体系构建白皮书【附全文阅读】
  • 汉语词汇的神奇拼图:关联性的魅力
  • AI大模型应对挑战,使用winform实现小球在旋转五边形内的舞蹈
  • Java数组列表 - ArrayList
  • 如何使用VH6501进行CAN采样点测试
  • Portal认证和802.1x的区别
  • 机器学习入门
  • 理解Java泛型
  • 直流无刷水泵方案之无感FOC控制---【其利天下技术】
  • StreamSaver实现大文件下载解决方案
  • 对象属性复制BeanCopier-笔记
  • 基于正点原子阿波罗F429开发板的LWIP应用(2)——设置静态IP和MAC地址修改
  • Python代码加密与发布方案详解
  • SpringMVC04所有注解按照使用位置划分| 按照使用层级划分(业务层、视图层、控制层)
  • MCP模型上下文协议:基于FastMCP 2.0的实践(2)
  • 机器学习第十九讲:交叉验证 → 用五次模拟考试验证真实水平
  • Linux基础IO(二)
  • upload-labs通关笔记-第14关 文件上传之文件头绕过(图片马)
  • 建筑墙壁红外热成像裂缝潮湿检测数据集VOC+YOLO格式306张2类别
  • 【项目】—高并发内存池
  • AUTOSAR图解==>AUTOSAR_SRS_SAEJ1939
  • day16-17-磁盘管理
  • 流程控制-循环
  • Robot Studio开发入门指南
  • 频分复用信号在信道中的状态
  • 第11天-Python GUI开发实战:Tkinter从入门到项目实践
  • 鸿蒙开发进阶:深入解析ArkTS语言特性与高性能编程实践