2024年 9 月 13 日,好消息好消息 dockerhub 的墙解封了,当前国内可以直接拉取 dockerhub 中心仓库的镜像

技术原创:技术爬爬虾

2024 年 6 月因不可抗因素导致国内各大知名 docker 镜像源停止服务,且 dockerhub 被墙。一时间广大中小企业及其个人用户镜像升级面临拉取失败、无法更新版本的困境,博主的家庭服务器也是运行在 docker 之上同时也面临这类问题。

网上也出现了很多个人自建的镜像源,但这类源无法保证安全以及持久。且个人自建的镜像源成本极高(磁盘、带宽服务器)存粹为爱发电,下面博主提供一种近乎零成本的方式利用 github 将 dockerhub 的镜像同步到 aliyun 镜像库中,有缺点如下:

  1. 优点:安全可靠,dockerhub 的镜像最安全且权威
  2. 优点:快速拉取,aliyun 个人镜像速度快且稳定
  3. 优点:零开销,使用 github action 微软帮你买买单
  4. 缺点:容量有限,aliyun 个人镜像服务镜像上限为 300

一、前期准备

1.1 开通 aliyun 镜像服务

开通 aliyun 个人镜像服务,并记录四个变量

step-1: https://www.aliyun.com 控制台搜索容器镜像服务并进入个人实例

image-20240818161217244

创建一个命名空间记ALIYUN_NAME_SPACE

image-20240819193630366

点击访问凭证获取:

  1. 用户名:ALIYUN_REGISTRY_USER
  2. 密码:ALIYUN_REGISTRY_PASSWORD
  3. 仓库地址:ALIYUN_REGISTRY

image-20240819193848593

1.2 配置 github action

fork 仓库 https://github.com/tech-shrimp/docker_image_pusher 到自己的仓库中

image-20240819194045394

进入自己的仓库后以此点击 Settings -> Security -> Secrets and variables -> Actions 将 1.1 记录的四个变量配置到 Repository secrets 中,如下图:

image-20240819194424389

下面只需要将待推送的镜像记录到 images.txt 中,格式如下:

  1. 官方镜像
nginx
nginx:latest
bitnami/clickhouse:23.4
  1. 私库
k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.0.0
xhofe/alist:latest
  1. 指定架构
--platform=linux/arm64 xiaoyaliu/alist

保存变更记录并提交后启动 Actions

image-20240819194845185

等待运行完成,可以在 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

image-20240819195909639

如上表示成功登录上镜像仓库。

接下来在镜像仓库中找到对应的镜像获取其公网地址

image-20240819200057072

到了这一步就可以 pull 镜像了

docker pull registry.cn-hangzhou.aliyuncs.com/wyc-base/clickhouse:[镜像版本号]