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

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 仓库的安装部署实际非常简单,后续的文章会进行快捷部署的介绍。

相关文章:

  • 物流项目第三期(统一网关、工厂模式运用)
  • 内网穿透:轻松实现外网访问本地服务
  • 101个α因子#8
  • 新凌印 4.2.0 | 国内短视频去水印下载~图集下载
  • 【数据结构】队列的完整实现
  • Brooks Polycold快速循环水蒸气冷冻泵客户使用手含电路图,适用于真空室应用
  • AI能源危机:人工智能发展与环境可持续性的矛盾与解决之道
  • 深入剖析Zynq AMP模式下CPU1中断响应机制:从原理到创新实践
  • addStretch 与addSpace的区别
  • base算法
  • 【YOLOs-CPP-图像分类部署】01-构建项目
  • bi报表是什么意思?如何制作一张bi报表?
  • 丝杆支撑座:机床生命周期的精度与效能
  • day 31
  • Linux(ubuntu18.04)下安装instant-ngp环境
  • 系统设计——项目设计经验总结1
  • 4.8 加密模块
  • 【动手学深度学习】1.1~1.2 机器学习及其关键组件
  • BioID技术:探索蛋白质相互作用的新方法
  • Vue3——Pinia
  • 韩国第二大轮胎制造商因火灾停产,或影响700万条轮胎销售
  • 新疆巴音郭楞州和硕县发生4.6级地震,震源深度10千米
  • 一周人物|收藏家瓦尔特捐出藏品,女性艺术家“对话”摄影
  • 中美博弈新阶段,这个“热带中国”火了
  • 西域都护府博物馆今日在新疆轮台县开馆
  • 体坛联播|水晶宫队史首夺足总杯,CBA总决赛爆发赛后冲突