/ 文档备忘 / 50浏览

Docker-pull-nginx-反代加速拉取

直接使用 NGINX 作为反向代理来加速 Docker Hub 镜像的下载,确实在某些情况下更好,资源占用更小,效率更高。以下是一些优点:

优点

  1. 更低的资源占用
    • NGINX 本身是一个高性能、轻量级的 Web 服务器,占用的资源较少。
    • 不需要额外运行 Docker Registry 容器,从而减少内存和 CPU 使用。
  2. 简化的配置
    • 直接配置 NGINX 反向代理,无需额外配置 Docker Registry,整体配置更简单。
    • 不需要为 Docker Registry 设置存储和持久化配置。
  3. 更高的效率
    • 由于省去了 Docker Registry 的中间层,反向代理直接处理 Docker Hub 请求,减少了请求的中转时间。
    • NGINX 可以高效地处理大量并发连接,提供快速的响应。

配置步骤

回顾一下之前的配置步骤,确保完整性和清晰性:

1. 安装 NGINX

确保安装 NGINX:

  • Debian/Ubuntu
    sudo apt-get install nginx
    
  • CentOS/RHEL
    sudo yum install nginx
    

2. 配置 NGINX 反向代理

编辑或创建 /etc/nginx/nginx.conf

server {
  listen 80;
  listen [::]:80;

  server_name  docker.example.com;
  return 301 https://docker.example.comrequest_uri;
}

server {
  listen       443 ssl;
  listen       [::]:443 ssl;

  server_name  docker.example.com;

  charset utf-8;

  ssl_certificate /path/fullchain.cer;
  ssl_certificate_key /path/docker.example.com.key;

  ssl_session_cache    shared:SSL:1m;
  ssl_session_timeout  5m;

  ssl_ciphers  HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers  on;

  location / {
    # 允许指定 IP 地址访问
    allow xxxxxxxx;
    deny all;

    proxy_pass https://registry-1.docker.io;
    proxy_set_header Host registry-1.docker.io;
    proxy_set_header X-Real-IPremote_addr;
    proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Protoscheme;
    # 关闭缓存
    proxy_buffering off;
    proxy_request_buffering off;
    # 转发认证相关
    proxy_set_header Authorization http_authorization;
    proxy_pass_header  Authorization;
    # 对 upstream 状态码检查,实现 error_page 错误重定向
    proxy_intercept_errors on;
    recursive_error_pages on;
    # 根据状态码执行对应操作,以下为301、302、307状态码都会触发,这个最关键
    error_page 301 302 307 = @handle_redirect;
    # 错误页面处理
    error_page 502 = /502.html;
  }

  location @handle_redirect {
      resolver 1.1.1.1;
      setsaved_redirect_location 'upstream_http_location';
      proxy_passsaved_redirect_location;
  }

  # 错误页面
  location = /502.html {
      root /usr/share/nginx/html;
      internal;
  }
}

3. 重启 NGINX

重启 NGINX 服务以应用配置:

sudo systemctl restart nginx

4. 配置 Docker 使用自建加速器

在 Docker 客户端上,编辑或创建 /etc/docker/daemon.json 文件:

{
  "registry-mirrors": ["https://your_domain_or_ip"]
}

重启 Docker 服务:

sudo systemctl restart docker

通过这些步骤,你可以使用 NGINX 作为反向代理来加速 Docker Hub 镜像的下载,并实现身份验证和镜像白名单功能。这种方法更适合资源有限的环境,同时保持高效的性能。