自建DockerHub镜像

自建DockerHub镜像

彼方 22 2024-06-15

这段时间,由于重所周知的原因,国内的各大高校及公司的docker镜像都已经失效,目前仍旧可用也许在未来也会关闭,那我们只能自己来搞喽,无奈。

本文介绍的两种方式并不是完全的零门槛,方式一需要你有自己的域名,方式二需要你有自己的境外服务器。

两种方案:

  • Cloud Flare 大善人提供的Worker(速度还行)

  • 国外服务器自建 (速度较快)

1. CloudFlare Worker

😊:嫌麻烦可以直接用我的:https://docker.bflome.com

此方案的前提是你得有一个域名,并托管到了CloudFlare上,就像我这样:

域名准备好了之后,克隆下面这个项目到本地:

https://github.com/ciiiii/cloudflare-docker-proxy

修改 src/index.jsmydomain.com替换为你的域名

const routes = {
  "docker.mydomain.com": "https://registry-1.docker.io",
  "quay.mydomain.com": "https://quay.io",
  "gcr.mydomain.com": "https://gcr.io",
  "k8s-gcr.mydomain.com": "https://k8s.gcr.io",
  "k8s.mydomain.com": "https://registry.k8s.io",
  "ghcr.mydomain.com": "https://ghcr.io",
  "cloudsmith.mydomain.com": "https://docker.cloudsmith.io",
};

修改 wrangler.toml,将mydomain.com替换为你的域名,后面部署之后自动将Worker绑定至自己的域名,并自动添加SSL证书

name = "cloudflare-docker-proxy"
workers_dev = true
main = "src/index.js"
compatibility_date = "2021-12-07"
routes = [
    { pattern = "docker.mydomain.com", custom_domain = true },
    { pattern = "quay.mydomain.com", custom_domain = true },
    { pattern = "gcr.mydomain.com", custom_domain = true },
    { pattern = "k8s-gcr.mydomain.com", custom_domain = true },
    { pattern = "k8s.mydomain.com", custom_domain = true },
    { pattern = "ghcr.mydomain.com", custom_domain = true },
    { pattern = "cloudsmith.mydomain.com", custom_domain = true },
]

[dev]
ip = "0.0.0.0"
port = 8787
local_protocol="http"
upstream_protocol="https"

[vars]
MODE="production"
LOCAL_ADDRESS=""
TARGET_UPSTREAM=""

[env.dev.vars]
MODE="debug"
LOCAL_ADDRESS="http://192.168.10.102:8787"
TARGET_UPSTREAM="https://registry-1.docker.io"

安装wrangler进行部署,安装教程参考下面这个项目:
https://github.com/zgimszhd61/cloudflare-quickstart

注:wrangler login 登录的时候,最好关闭代理软件,否则可能登录失败

安装完成之后,在项目根目录下进行部署:


wrangler deploy

部署成功之后,你的CloudFlare下将多出一个Worker,如下图:

然后,稍等几分钟,这个时候我们可以去配置Docker Mirror进行加速,如果你恰好使用了1Panel,那就可以像下面这样配置一下,就可以尽情拉镜像了:

2. 服务器自建

懒人脚本

bash <(curl -sL https://raw.githubusercontent.com/lainbo/gists-hub/master/src/Linux/sh/deploy_registry.sh)

懒人脚本会利用docker在17951端口上起这个自建服务,接下来就是

  1. 反代一下上面写的17951端口,给个域名,https证书加一下,DNS解析添一条

  1. 此时我们在境内服务器中输入以下命令即可生效

echo '{"registry-mirrors": ["https://你反代的域名"]}' | sudo tee /etc/docker/daemon.json > /dev/null
sudo systemctl restart docker