使用Github Action将国外的Docker镜像转存到华为云私有仓库,供国内服务器使用,免费易用
- 支持DockerHub, gcr.io, k8s.io, ghcr.io等任意仓库
本项目参考了大佬技术爬爬虾的 (https://github.com/tech-shrimp/me) 项目
华为云首页:https://www.huaweicloud.com/
登录华为云,首页搜索容器,选择容器镜像服务 SWR
例如长期登陆指令为:
docker login -u cn-north-4@NKXXXXXXXXXXS -p 2xxxxxxxxxxxxxx6a2 swr.cn-north-4.myhuaweicloud.com
需要保存三个值,后面会用到:
华为云用户名:cn-north-4@NKXXXXXXXXXXS
华为云用户密码:2xxxxxxxxxxxxxx6a2
华为云仓库地址:swr.cn-north-4.myhuaweicloud.com
镜像服务控制台页面选择组织管理,然后创建组织,并复制组织名称
现在已经获取到了到了四个值,以下四个变量分别代表:
HW_REGISTRY:华为云仓库地址
HW_ORG_NAME:华为云组织名称
HW_REGISTRY_USER:华为云用户名
HW_REGISTRY_PASSWORD:华为云用户密码
Fork本项目
进入自己的项目,点击Action,启用Github Action功能
进入Settings->Secret and variables->Actions->New Repository secret
将上一步的四个值
HW_REGISTRY,HW_ORG_NAME,HW_REGISTRY_USER,HW_REGISTRY_PASSWORD
配置成环境变量
打开images.json文件,根据docker官方的镜像信息填写需要同步的镜像信息
- image字段:填写镜像仓库地址,支持以下格式:
- 官方镜像
- 第三方镜像:bitnami/nginx → 保持原命名空间
- 带标签镜像:alpine:3.18 → 自动剥离标签保留名称
- 官方镜像
- version字段:镜像版本号,如latest,noble-20250127等。
- architectures字段:填写镜像的系统架构,支持同步多架构的镜像,需与Docker官方平台标识的架构严格对应,对应关系如下。
- linux/386:386
- linux/amd64:amd64
- linux/arm/v5:armv5
- linux/arm/v6:armv6
- linux/arm/v7:armv7
- linux/arm64/v8:arm64v8
- linux/mips64le:mips64le
- linux/ppc64le:ppc64le
- linux/s390x:s390x
- linux/386:386
nginx镜像信息如下:
ubuntu镜像信息如下:
根据图中所示的信息编写的json文件如下:
[
{
"image": "ubuntu",
"version": "noble-20250127",
"architectures": [
"amd64",
"armv7",
"arm64v8",
"ppc64le",
"riscv64",
"s390x"
]
},
{
"image": "nginx",
"version": "stable-perl",
"architectures": [
"386",
"amd64",
"armv5"
]
},
]
提交文件后,会自动执行Github Action,向华为云镜像仓库上传镜像
回到华为云,镜像仓库,点击任意镜像,可查看镜像状态,可以改成公开,拉取镜像免登录。
要在服务器上拉取华为云镜像仓库中的镜像, 具体使用方法请打开仓库中的镜像详情查看。
修改/.github/workflows/docker.yaml文件 添加 schedule 即可定时执行(此处cron使用UTC时区)
name: Scheduled Task
on:
schedule:
- cron: '0 0 * * *' # 每天UTC时间00:00执行(北京时间08:00)
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Run Script
run: echo "定时任务已执行"