最近,国内大部分的主流 Docker
镜像站点都纷纷关闭,作为一个软件开发人员,搭建一个专属的镜像加速服务自用还是很有必要的。本文依然是依托 Cloudflare Workers
能力搭建一个 Serverless
的 Docker
镜像加速服务,你不需要准备任何服务器,整个过程跟随博文一步步下来,几分钟就可以完成搭建。
准备工作
首先你需要注册一个 Cloudflare
账号,其次还需要一个自己的域名并托管到 Cloudflare
,如果这一步不知道怎么做的同学,可以参考我的另一篇博文 如何注册一个域名并托管到Cloudflare。当然,也可以省事直接在 Cloudflare
上购买域名,xyz
、top
的域名大多每年 $1 不到。
部署
首先打开 Github
的 ciiiii/cloudflare-docker-proxy 项目。
点击 README
的 Deploy with Workers
按钮,进入部署流程。
国内对github的访问向来是时断时续的,如果安装失败可以等一等,或者使用科学上网工具,这里推荐可以 注册 一个,目前有免费流量可以薅羊毛。
首先点击 Authorize Workers
按钮,如果你的 Github
未登录的话,需要你先完成登录,登录完成后自动完成 Workers
的授权,进入下一步。
这个时候你应该已经创建好 Cloudflare
账号了,所以点 I have an account
按钮。
在这里,你需要输入 Account ID
和 API Token
两个参数,点击左边的 Workers Dashboard
链接,在弹出页面的右边可以看到你的 账户ID
,复制到这里 Account ID
里。
然后再点击右边的 My Profile
链接,获取你的 API 令牌
。如果你已经有 Edit Workers
权限的令牌了就可以直接使用,如果没有就需要重新创建一个。
点击 创建令牌
按钮,点击 编辑 Cloudflare Workers
这行后面的 使用模板
按钮,开始创建一个新的令牌。
权限无需修改,账户资源选择所有账户, 区域资源选择所有区域,点击 继续以显示摘要
按钮,再点击 创建令牌
按钮。
这样新的令牌已经创建好了,你需要将这个令牌复制到部署页面的 API Token
输入框中。
注意,令牌只会显示一次,如果你没有复制就关闭了页面就需要重新创建或者更新令牌了。
接下来,点击 Connect account
按钮进入下一步。
首选点击 Fork the repository
按钮,自动将 Github
项目 Fork
到了你的仓库中,下一步需要开启 Actions
。
点击 Repository - Actions
链接,弹出 Github
的 Actions
面板。
先不急着打开,我们先切换到 Settings
面板,在左侧选择 Secrets and variables
- Actions
。
点击 New repository secret
按钮,在 Name
栏输入 CUSTOM_DOMAIN
,在 Secret
栏输入你注册的域名。
这里输入
example.com
就表示你的Docker
镜像服务域名为docker.example.com
。
输入完毕后,点击 Add Secret
按钮保存。然后再回到前面的 Actions
面板,点击那个长长的绿色按钮启用 Actions
。
做完这一步再回到前面的部署页面,会看到 Workflows enabled
按钮已经点亮了,点击它进入最后一步。
点击 Deploy
按钮,这时你在 Github
的 Actions
面板就可以看到已经开始自动执行部署了。
过了一会,部署成功,你就可以在 Cloudflare
的 Workers 和 Pages
面板看到你发布的 Workers
服务了。
上面一个是自动发布的稳定版本,可以不用管它,也可以删除。
绑定域名
按照上一步输入的 CUSTOM_DOMAIN
为 example.com
的假设,代理服务的域名规则如下:
{
"routes": {
"docker.example.com": "https://registry-1.docker.io",
"quay.example.com": "https://quay.io",
"gcr.example.com": "https://gcr.io",
"k8s-gcr.example.com": "https://k8s.gcr.io",
"k8s.example.com": "https://registry.k8s.io",
"ghcr.example.com": "https://ghcr.io",
"cloudsmith.example.com": "https://docker.cloudsmith.io",
"ecr.example.com": "https://public.ecr.aws"
}
}
接下去你需要将这些子域名按需绑定到 Workers
上,如果你只需要 Docker
镜像加速,就只绑定一个 docker.example.com
即可。
首先在 Workers 和 Pages
面板点击 cloudflare-docker-proxy
进入管理页面,再点击设置页签。
点击 域和路由
右边的 添加
按钮,在浮出的右侧栏点击 自定义域
,在 域
的输入框输入你要绑定的子域名。
点击 添加域
按钮后,绑定生效,稍微过两分钟,等子域名证书自动部署后即可生效。
配置 Docker
上面服务的部署已经完成,现在要 Docker
客户端上配置使用我们搭建的服务。
在 /etc/docker
目录下创建 daemon.json
文件,如果已有,则加上下面的那一行配置。
{
"registry-mirrors": ["https://docker.example.com"]
}
然后还需要重启 Docker
服务。
systemctl restart docker
至此,整个搭建就结束了,以后就可以用你专属的代理服务来拉取 Docker
镜像啦。
注意:docker login 目前无法支持,所以本服务只能用来拉取公共镜像。