部署私有的Dockerhub镜像源

Arc 发布于 27 天前 97 次阅读


前言

一直以来,Dockerhub在国内的服务肯定算不上稳定:缓慢的拉取速度,时断时连的网络环境……所以我们一般使用国内的Dockerhub镜像源来解决这个问题。

不过有的时候,这些国内的镜像源也不算是很稳定。所以,我们来部署一套私有镜像源来解决这个问题。

Github项目

第一步当然是去找个现成的部署项目。经过寻找,我们找到了dqzboy/Docker-Proxy,然后我们用脚本无脑一键安装。这里需要安装到你用来代理的服务器(一般来说在海外)

apt -y install curl

bash -c "$(curl -fsSL https://raw.githubusercontent.com/dqzboy/Docker-Proxy/main/install/DockerProxy_Install.sh)"

随后编辑一下yaml,设置一下端口对应,我这里设置到51000

vim /data/registry-proxy/docker-compose.yaml

示例编辑

dockerhub:
    container_name: reg-docker-hub
    image: dqzboy/registry:latest
    restart: always
    environment:
      - OTEL_TRACES_EXPORTER=none
      #- http=http://host:port
      #- https=http://host:port
    volumes:
      - ./registry/data:/var/lib/registry
      - ./registry-hub.yml:/etc/distribution/config.yml
      #- ./htpasswd:/auth/htpasswd
    ports:
      - 51000:5000
    networks:
      - registry-net

Nginx反向代理

随后我们在Nginx中设置一下反向代理。

这里我们就使用一个基础认证,来实现一下。

## docker hub
##
server {
    listen       80;
    listen       443 ssl;
    ## 填写绑定证书的域名
    server_name  hub_name.url.suffix;
    ## 证书文件名称(填写你证书存放的路径和名称)
    ssl_certificate /somefolders/cert.pem;
    ## 私钥文件名称(填写你证书存放的路径和名称)
    ssl_certificate_key /somefolders/key.pem;
    ssl_session_timeout 1d;
    #ssl_session_cache   shared:SSL:50m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_buffer_size 8k;

    proxy_connect_timeout 600;
    proxy_send_timeout    600;
    proxy_read_timeout    600;
    send_timeout          600;

    root /var/www/dockerhub;
    index index.html index.htm index.nginx-debian.html;

    location / {
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/.htpasswd;
        proxy_pass   http://127.0.0.1:51000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Nginx-Proxy true;
        proxy_buffering off;
        proxy_redirect off;
    }
}

设置auth用户与密码

一般来说,安装了Nginx就已经安装了htpasswd这个密码管理软件。我们直接搞一个新用户然后设置密码就行。

htpasswd -c /etc/nginx/.htpasswd docker_user

输入两遍密码就可以设置一个密码。

重启服务

service nginx restart

验证

我们访问设置的DockerHub镜像源,会跳出一个用户名密码设置。我们直接进行验证就能看到结果。

http://hub_name.url.suffix/v2/
It is my final heart.
最后更新于 2025-03-29