大家好,我是羊刀仙。
国内NAS用户(威联通、群晖等)和大陆VPS服务器用户在Docker镜像拉取方面现在有不小的压力,想必大家也知道不少加速小妙招了,这次我就再来分享一个。
本期带来的是另一个自建Docker镜像加速方法,该项目基于官方Docker Registry 可一键部署Docker、K8s、Quay、Ghcr、Mcr、elastic等镜像加速管理服务。
之前发布过很多很多篇Docker镜像加速相关文章,近期会抽空做一个整合。
先说说硬性要求:
VPS服务器一台,配置不求高(1H1G足矣)但必须海外,可买可白嫖;
域名一枚,可买可白嫖,建议托管至Cloudflare(简称cf),顺便借用cf生成15年的证书。
准备工作
⭕️服务器启用准备
设置防火墙开放端口,ICMP、TCP、UDP端口全部打开(个人习惯),各位可以逐个开放。
通过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
一项,找到源服务器
,右侧点击创建证书
,如下图所示。
接着修改最下面的证书有效期,选择15年,其它保持默认即可,点击创建
。
创建两个记事本文件,复制下面的源证书和私钥保存,分别命名为.pem
和.key
,我这里选择以域名前缀,保存为ydxian.pem
和ydxian.key
。
密钥只会显示这一次,如果忘了存,那就吊销新建一个。
接着点击左侧栏DNS
,选择记录
,添加几个DNS记录,这里建议添加俩,docker.ydxian.love
和docui.ydxian.love
,一个作为镜像加速,一个作为UI界面。
⭕️文件准备
本文就4个文件夹,其中2个与证书相关。
其次是docker-compose.yaml
和config.yml
这俩,考虑到部分朋友,我直接从项目下载了放在云盘,点我获取,提取码: 8ivv。
本文我仅用到了Docker Hub,因此只需要registry-hub.yml
这个配置文件。
原本的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-compose.yaml
和config.yml
。
输入命令,确认已经上传完毕。
接着输入以下命令:
docker-compose up -d
配置Nginx
继续使用文件管理工具,把证书相关的两个文件,上传至/etc/nginx
,此位置为默认位置。
接着输入命令:
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支持,目前我觉得意义不大,这个项目后续就撤掉了。
使用方法
⭕️修改daemon.json配置
一劳永逸的方法,SSH控制台输入命令:
vim /etc/docker/daemon.json
如图,修改成你自己的域名,重启Docker服务即可。
⭕️部署修改命令行
原部署代码,以极简方式部署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格式必须按照下图所示,结果是验证成功,点击应用
。
接着点击左侧栏映像
-提取
,需要选择刚添加的库,还是以数据库项目mysql
测试,可以顺手把设置为默认勾选上。输入library/mysql
并提取。
添加认证
大家应该还记得上面部署文件和配置文件有被注释的认证部分:
#- ./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
此时便OK了。
最后
如果各位觉得本篇文章有所帮助,别忘了三连支持下,能点点关注就更好了!后续我还会持续分享各类教程以及有趣好玩的项目。
感谢观看,本文完。
,