前端时间发现之前用的docker镜像加速地址都不能用了,就连阿里云的在云服务器上拉去境外的镜像也不一定能拉到,好像各家的镜像加速服务都想约好的都停止运行了,好不容易找到一个也不太稳定,于是在想万一找不到可用的,能否自己搭建使用,于是查阅各种资料整理如下
需要准备
境外服务器,国内因为一些神秘力量的影响,访问https://registry-1.docker.io/会超时,所以需要一台境外服务器作为代理
域名,通过域名访问服务器下载镜像,可以去阿里云或其他渠道购买
SSL证书,可以免费申请SSL证书绑定域名使用,具体可以参考我的这篇博文:https://www.chengpei.top/archives/acme-letsencrypt-ssl-nginx
搭建registry
registry是一个用于存储、管理和分发Docker镜像的工具,可以通过docker搭建,脚本如下:
docker run --restart=always --name registry \
-v /opt/registry/data:/var/lib/registry \
-v /opt/registry/config.yml:/etc/docker/registry/config.yml \
-d registry:2
其中config.yml文件内容如下:
version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:入
storagedriver:
enabled: true
interval: 10s
threshold: 3
proxy:
remoteurl: https://registry-1.docker.io
最后一个配置是在默认配置基础上增加的,如果没有配置的话拉取本地不存在的镜像会提示找不到,如果增加了代理配置,则会从配置的远程URL中拉取,并且存储在本地,这样下次拉取就可以直接走本地镜像了
Nginx配置
以上的registry搭建好后会在本地服务器上启动一个5000端口用于镜像的拉取管理等,比如:获取当前存储的镜像,通过HTTP GET请求/v2/_catalog,就会返回一个json格式的信息包含服务器上存储的镜像
然后我们需要配置nginx转发所有/v2前缀的请求到5000端口,并且配置好SSL证书
server {
listen 443 ssl;
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name docker.xxxxx.xxx ; #需要将yourdomain.com替换成证书绑定的域名。
root html;
index index.html index.htm;
ssl_certificate cert/cert.pem; #需要将cert-file-name.pem替换成已上传的证书文件的名称。
ssl_certificate_key cert/key.pem; #需要将cert-file-name.key替换成已上传的证书密钥文件的名称。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
charset utf8;
location /v2/ {
proxy_read_timeout 900;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://172.17.0.2:5000; # docker registry的访问地址
}
}
第六行需要替换你的域名,最后一行配置你本地registry的访问地址,最后在域名管理后台配置好你的域名映射地址即可
然后使用加速器的客户端执行以下命令配置加速代理的地址即可:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.xxxxx.xxx]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
评论区