大家好,我是羊刀仙。

国内NAS用户(威联通、群晖等)和大陆VPS服务器用户在Docker镜像拉取方面现在有不小的压力,想必大家也知道不少加速小妙招了,这次我就再来分享一个。

本期带来的是另一个自建Docker镜像加速方法,该项目基于官方Docker Registry 可一键部署Docker、K8s、Quay、Ghcr、Mcr、elastic等镜像加速管理服务。

之前发布过很多很多篇Docker镜像加速相关文章,近期会抽空做一个整合。

先说说硬性要求:


VPS服务器一台,配置不求高(1H1G足矣)但必须海外,可买可白嫖;

域名一枚,可买可白嫖,建议托管至Cloudflare(简称cf),顺便借用cf生成15年的证书。

准备工作


⭕️服务器启用准备

设置防火墙开放端口,ICMP、TCP、UDP端口全部打开(个人习惯),各位可以逐个开放。

破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

通过SSH连接进入控制台,类似于NAS访问。最简单的可以使用 FinalShell ,最好是能同步支持文件管理(上传)的。

这里也推荐 WebSSH,网页操作,支持简单文件/文件夹上传,用了快一年,非常不错。

部署链接:

控制台输入以下命令:

ssh root@106.45.22.34 # 不同系统账户名不同,IP为外网或公网IP,这个要注意 sudo -i # 一般不需要,基本默认会给root apt update # 更新软件包列表,让系统知道有哪些软件包可以更新 apt upgrade --only-upgrade # 安装所有可用的软件包更新 apt install wget curl sudo vim git -y # 安装常用软件包,Debian一般来说需要这步

接下来安装Docker,接着输入命令:

wget -qO- get.docker.com | bash # 非大陆服务器安装docker docker -v # 确认是否安装成功及查看版本 systemctl enable docker # 设置开机自动启动 apt install docker-compose # 安装docker-compose docker-compose --version #查看docker-compose版本

⭕️cf接管域名与证书申请

域名接管

请看这篇,操作很简单:

证书申请

在托管完域名后,点击进入域名,在SSL/TLS一项,找到源服务器,右侧点击创建证书,如下图所示。

破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

接着修改最下面的证书有效期,选择15年,其它保持默认即可,点击创建

破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

创建两个记事本文件,复制下面的源证书私钥保存,分别命名为.pem.key,我这里选择以域名前缀,保存为ydxian.pemydxian.key

破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

密钥只会显示这一次,如果忘了存,那就吊销新建一个。

接着点击左侧栏DNS,选择记录,添加几个DNS记录,这里建议添加俩,docker.ydxian.lovedocui.ydxian.love,一个作为镜像加速,一个作为UI界面。

破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

⭕️文件准备

本文就4个文件夹,其中2个与证书相关。

其次是docker-compose.yamlconfig.yml这俩,考虑到部分朋友,我直接从项目下载了放在云盘,点我获取,提取码: 8ivv。

本文我仅用到了Docker Hub,因此只需要registry-hub.yml这个配置文件。

破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

原本的docker-compose.yaml内容很多,可以一键部署诸多镜像加速服务,各位自取所需,我仅以Docker Hub为例,最后修改结果如下:

version: '3' services: ## docker hub 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 ## UI registry-ui: container_name: registry-ui image: dqzboy/docker-registry-ui:latest environment: # UI所关联的REGISTRY容器服务地址 - DOCKER_REGISTRY_URL=http://reg-docker-hub:5000 # [必须]SSH命令输入 openssl rand -hex 16 生成唯一值 - SECRET_KEY_BASE=6b3d818294c1bec22808b811689dd3a9 # 启用Image TAG 的删除按钮 - ENABLE_DELETE_IMAGES=true - NO_SSL_VERIFICATION=true restart: always ports: - 50000:8080 networks: - registry-net networks: registry-net:

再来看一眼registry-hub.yml文件:

version: 0.1 log: fields: service: registry storage: filesystem: rootdirectory: /var/lib/registry delete: enabled: true cache: blobdescriptor: inmemory blobdescriptorsize: 10000 maintenance: uploadpurging: enabled: true age: 168h interval: 24h dryrun: false readonly: enabled: false http: addr: :5000 headers: X-Content-Type-Options: [nosniff] Access-Control-Allow-Origin: ['*'] Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE'] Access-Control-Allow-Headers: ['Authorization', 'Accept', 'Cache-Control'] Access-Control-Max-Age: [1728000] Access-Control-Allow-Credentials: [true] Access-Control-Expose-Headers: ['Docker-Content-Digest'] # 与上面的认证有关,开启认证需要删掉#取消注释 # auth: # htpasswd: # realm: basic-realm # path: /auth/htpasswd health: storagedriver: enabled: true interval: 10s threshold: 3 proxy: remoteurl: https://registry-1.docker.io username: password: ttl: 168h

服务部署


先依次输入以下命令:

mkdir -p /root/data/docker_data/docker_proxy cd /root/data/docker_data/docker_proxy

点击右上角的文件管理,上传文件,是在/root目录下。

破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。
破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

点击上传docker-compose.yamlconfig.yml

破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

输入命令,确认已经上传完毕。

破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

接着输入以下命令:

docker-compose up -d

配置Nginx


继续使用文件管理工具,把证书相关的两个文件,上传至/etc/nginx,此位置为默认位置。

破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

接着输入命令:

cd /etc/nginx/conf.d vim registry-proxy.conf

将以下代码粘贴进去:

## registry-ui server { listen 80; listen 443 ssl; ## UI绑定域名 server_name docui.ydxian.love; ## 证书文件 ssl_certificate /etc/nginx/ydxian.pem; ## 私钥 ssl_certificate_key /etc/nginx/ydxian.key; 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; location / { proxy_pass http://localhost:50000; proxy_set_header Host $host; proxy_set_header Origin $scheme://$host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Ssl on; # Optional proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Forwarded-Host $host; } } ## docker hub server { listen 80; listen 443 ssl; ## docker绑定域名 server_name docker.ydxian.love; ## 同上 ssl_certificate /etc/nginx/ydxian.pem; ## 同上 ssl_certificate_key /etc/nginx/ydxian.key; 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; location / { proxy_pass http://localhost: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; } }

英文输入状态下,按i即可进行修改。修改完毕后,按下esc,再同时按下shift+:,英文状态输入wq并回车,即可保存。

重启Nginx和Docker服务:

systemctl restart nginx systemctl restart docker

使用方面


web输入docui.ydxian.love即可访问UI界面,但是缺少很多API支持,目前我觉得意义不大,这个项目后续就撤掉了。

破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

使用方法


⭕️修改daemon.json配置

一劳永逸的方法,SSH控制台输入命令:

vim /etc/docker/daemon.json

如图,修改成你自己的域名,重启Docker服务即可。

破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

⭕️部署修改命令行

原部署代码,以极简方式部署nginx为例:

docker run -d --name nginx -p 80:80 nginx image: nginx # docker compose 部署,仅需改这里 docker pull nginx # 单纯拉取镜像

使用镜像加速后的代码:

docker run -d --name nginx -p 80:80 docker.ydxian.love/nginx image: docker.ydxian.love/nginx docker pull docker.ydxian.love/nginx

⭕️NAS设置

这里以威联通为例:

打开Container Station,点击左侧存储库-添加添加存储库进行验证,名称随意,URL格式必须按照下图所示,结果是验证成功,点击应用

破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

接着点击左侧栏映像-提取,需要选择刚添加的库,还是以数据库项目mysql测试,可以顺手把设置为默认勾选上。输入library/mysql并提取。

破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

添加认证


大家应该还记得上面部署文件和配置文件有被注释的认证部分:

#- ./htpasswd:/auth/htpasswd # 以及 #auth: # htpasswd: # realm: basic-realm # path: /auth/htpasswd

输入命令将这几部分注释都取消:

cd /root/data/docker_data/docker_proxy vim docker-compose.yaml vim registry-proxy.conf

保存后退出,接着输入命令:

htpasswd -c ./htpasswd ydxian # 重复输入密码两次即可 docker-compose restart 破解 Docker 拉取难题:超稳定国内镜像加速服务部署指南!基于Docker Registry 一键部署多方镜像加速。

此时便OK了。

最后


如果各位觉得本篇文章有所帮助,别忘了三连支持下,能点点关注就更好了!后续我还会持续分享各类教程以及有趣好玩的项目。

感谢观看,本文完。

,

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。