复活 docker-利用 github 和 aliyun 同步 docker 镜像
2024年 9 月 13 日,好消息好消息 dockerhub 的墙解封了,当前国内可以直接拉取 dockerhub 中心仓库的镜像
技术原创:技术爬爬虾
2024 年 6 月因不可抗因素导致国内各大知名 docker 镜像源停止服务,且 dockerhub 被墙。一时间广大中小企业及其个人用户镜像升级面临拉取失败、无法更新版本的困境,博主的家庭服务器也是运行在 docker 之上同时也面临这类问题。
网上也出现了很多个人自建的镜像源,但这类源无法保证安全以及持久。且个人自建的镜像源成本极高(磁盘、带宽服务器)存粹为爱发电,下面博主提供一种近乎零成本的方式利用 github 将 dockerhub 的镜像同步到 aliyun 镜像库中,有缺点如下:
- 优点:安全可靠,dockerhub 的镜像最安全且权威
- 优点:快速拉取,aliyun 个人镜像速度快且稳定
- 优点:零开销,使用 github action 微软帮你买买单
- 缺点:容量有限,aliyun 个人镜像服务镜像上限为 300
一、前期准备
1.1 开通 aliyun 镜像服务
开通 aliyun 个人镜像服务,并记录四个变量
step-1: https://www.aliyun.com 控制台搜索容器镜像服务并进入个人实例
创建一个命名空间记ALIYUN_NAME_SPACE
点击访问凭证获取:
- 用户名:ALIYUN_REGISTRY_USER
- 密码:ALIYUN_REGISTRY_PASSWORD
- 仓库地址:ALIYUN_REGISTRY
1.2 配置 github action
fork 仓库 https://github.com/tech-shrimp/docker_image_pusher 到自己的仓库中
进入自己的仓库后以此点击 Settings -> Security -> Secrets and variables -> Actions 将 1.1 记录的四个变量配置到 Repository secrets 中,如下图:
下面只需要将待推送的镜像记录到 images.txt 中,格式如下:
- 官方镜像
nginx
nginx:latest
bitnami/clickhouse:23.4
- 私库
k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.0.0
xhofe/alist:latest
- 指定架构
--platform=linux/arm64 xiaoyaliu/alist
保存变更记录并提交后启动 Actions
等待运行完成,可以在 aliyun 镜像服务中对应的命名空间中看到对应的镜像
1.3 原理解析
通过 github 提供的容器运行程序,将配置的镜像从 dockerhub 中 pull 到本地,并获取配置好的环境变量登录 aliyun 个人镜像仓库,同时修改镜像 tag 后 push 到个人仓库。源码在仓库的 .github/workflows/docker.yaml 中
若需要定时更新镜像,可以配置 actions 定时调度,在 docker.yaml 中配置
name: Docker on: workflow_dispatch: push: branches: [ main ] schedule: - cron: '00 23 * * *'
二、使用教程
获取 1.1 中的登录 Registry 实例命令,例如
$ sudo docker login --username=小王是个弟弟 registry.cn-hangzhou.aliyuncs.com
如上表示成功登录上镜像仓库。
接下来在镜像仓库中找到对应的镜像获取其公网地址
到了这一步就可以 pull 镜像了
docker pull registry.cn-hangzhou.aliyuncs.com/wyc-base/clickhouse:[镜像版本号]
- 感谢你赐予我前进的力量