环境需要

需要一个域名,需要一台外网的服务器。

解析域名

首先解析三个域名到服务器。

dockerhub.example.com
auth.dockerhub.example.com
production.dockerhub.example.com

安装 caddy

# centos
yum install -y caddy

# ubuntu
apt install -y caddy

配置 caddy

mkdir caddy
cd caddy
vim /etc/caddy/Caddyfile

dockerhub.example.com {
	reverse_proxy https://registry-1.docker.io {
		header_up Host {http.reverse_proxy.upstream.hostport}
		header_down WWW-Authenticate "https://auth.docker.io" "https://auth.dockerhub.example.com"
		header_down Location "https://production.cloudflare.docker.com" "https://production.dockerhub.example.com"
	}
}

auth.dockerhub.example.com {
	reverse_proxy https://auth.docker.io {
		header_up Host {http.reverse_proxy.upstream.hostport}
	}
}

production.dockerhub.example.com {
	reverse_proxy https://production.cloudflare.docker.com {
		header_up Host {http.reverse_proxy.upstream.hostport}
	}
}

测试启动 caddy

caddy run

配置 docker

vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://docker.example.com"]
}

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl status docker

测试从镜像下载 images

在一台国内的电脑上执行以下命令

docker run docker.example.com/library/hello-world

正式启动 caddy

caddy start

停止 caddy

caddy stop

caddy status

caddy reload