Rokcso's Blog

使用 Cloudflare 部署 Docker 镜像代理

为了解决 Docker 镜像拉取的网络问题,我尝试过使用网上公开分享的镜像源、阿里云个人镜像源、个人镜像仓库等方式,不是经常失效就是操作繁琐,直到我发现了 CF-Workers-docker.io 这个项目,这是一个基于 Cloudflare Workers 的 Docker 镜像代理工具。它能够中转对 Docker 官方镜像仓库的请求,可以加速访问和解决一些访问限制的问题。并且部署、使用都非常简单。

部署 & 使用

本文所有命令仅在 Ubuntu Server 22.04 LTS 64bit 环境下测试通过。

将这个 GitHub 仓库 Fork 到自己的 GitHub,登录 Cloudflare 后点击「Compute (Workers)」选择「Workers & Pages」,点击「Create」选择「Pages」,点击「Import an existing Git repository」处的「Get started」,授权连接到自己的 GitHub 后选择刚刚 Fork 的 CF-Workers-docker.io 仓库,点击「Begin setup」,所有配置保持默认即可,点击「Save and Deploy」。

项目部署完成后 Cloudflare 默认会提供一个域名,可以选择绑定自己的域名(简化记忆成本)使用,但是直接使用 Cloudflare 提供的域名可能更安全 (⊙_⊙)? 。

注意:部署的代理服务建议仅供个人使用,不要公开分享。

使用时只需要在正常 Pull Docker 时在官方镜像名前加上部署后得到的域名和 / 即可,比如:

docker pull xxx.pages.dev/sissbruecker/linkding:latest

这里的 xxx.pages.dev 就是刚刚在 Cloudflare 部署后得到的域名。

也可以将上面这个域名添加为 Docker 镜像源,编辑 Docker 配置文件 daemon.json

sudo nano /etc/docker/daemon.json

增加镜像源配置:

{
    "registry-mirrors": ["https://xxx.pages.dev"]
}            

可以使用以下命令查看确认一下文件内容:

cat /etc/docker/daemon.json

然后重载配置文件并重启 Docker 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

修改下载的 Docker 镜像名

发现直接在 Pull Docker 时添加域名的方式下载的镜像文件名也会包含域名,对于后续的使用会比较不方便,所以建议修改为官方镜像名。

首先查看本机存在的所有 Docker 镜像:

docker images

输出可能为:

REPOSITORY                           TAG     IMAGE ID      CREATED      SIZE
xxx.pages.dev/sissbruecker/linkding  latest  de0d3e5r79f1  2 weeks ago  489MB

使用以下命令来将旧 REPOSITORY 名映射指定为新 REPOSITORY 名:

docker tag <旧REPOSITORY>:<TAG> <新REPOSITORY>:<新TAG>

比如:

docker tag xxx.pages.dev/sissbruecker/linkding:latest sissbruecker/linkding:latest

这个命令会从旧的镜像复制一个新的镜像并重新命名,所以旧的镜像依然存在,如果旧的镜像没有被其他容器依赖可以选择删除干净:

docker rmi xxx.pages.dev/sissbruecker/linkding:latest

#skill #Docker #Cloudflare