目 录CONTENT

文章目录

自建Docker镜像加速器服务

成培培
2024-12-09 / 0 评论 / 0 点赞 / 26 阅读 / 0 字

前端时间发现之前用的docker镜像加速地址都不能用了,就连阿里云的在云服务器上拉去境外的镜像也不一定能拉到,好像各家的镜像加速服务都想约好的都停止运行了,好不容易找到一个也不太稳定,于是在想万一找不到可用的,能否自己搭建使用,于是查阅各种资料整理如下

需要准备

  1. 境外服务器,国内因为一些神秘力量的影响,访问https://registry-1.docker.io/会超时,所以需要一台境外服务器作为代理

  2. 域名,通过域名访问服务器下载镜像,可以去阿里云或其他渠道购买

  3. 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

0

评论区