大家好,我是羊刀仙。

國內(nèi)NAS用戶(威聯(lián)通、群暉等)和大陸VPS服務器用戶在docker鏡像拉取方面現(xiàn)在有不小的壓力,想必大家也知道不少加速小妙招了,這次我就再來分享一個。

本期帶來的是另一個自建Docker鏡像加速方法,該項目基于官方Docker Registry 可一鍵部署Docker、K8s、Quay、Ghcr、Mcr、elastic等鏡像加速管理服務。

之前發(fā)布過很多很多篇Docker鏡像加速相關(guān)文章,近期會抽空做一個整合。

先說說硬性要求:


VPS服務器一臺,配置不求高(1H1G足矣)但必須海外,可買可白嫖;

域名一枚,可買可白嫖,建議托管至Cloudflare(簡稱cf),順便借用cf生成15年的證書。

準備工作


??服務器啟用準備

設置防火墻開放端口,ICMP、TCP、UDP端口全部打開(個人習慣),各位可以逐個開放。

破解 Docker 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于Docker Registry 一鍵部署多方鏡像加速。

通過SSH連接進入控制臺,類似于NAS訪問。最簡單的可以使用 FinalShell ,最好是能同步支持文件管理(上傳)的。

這里也推薦 WebSSH,網(wǎng)頁操作,支持簡單文件/文件夾上傳,用了快一年,非常不錯。

部署鏈接:

控制臺輸入以下命令:

ssh root@106.45.22.34 # 不同系統(tǒng)賬戶名不同,IP為外網(wǎng)或公網(wǎng)IP,這個要注意 sudo -i # 一般不需要,基本默認會給root apt update # 更新軟件包列表,讓系統(tǒng)知道有哪些軟件包可以更新 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一項,找到源服務器,右側(cè)點擊創(chuàng)建證書,如下圖所示。

破解 Docker 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于Docker Registry 一鍵部署多方鏡像加速。

接著修改最下面的證書有效期,選擇15年,其它保持默認即可,點擊創(chuàng)建。

破解 Docker 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于Docker Registry 一鍵部署多方鏡像加速。

創(chuàng)建兩個記事本文件,復制下面的源證書私鑰保存,分別命名為.pem.key,我這里選擇以域名前綴,保存為ydxian.pemydxian.key。

破解 Docker 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于Docker Registry 一鍵部署多方鏡像加速。

密鑰只會顯示這一次,如果忘了存,那就吊銷新建一個。

接著點擊左側(cè)欄DNS,選擇記錄,添加幾個DNS記錄,這里建議添加倆,docker.ydxian.lovedocui.ydxian.love,一個作為鏡像加速,一個作為UI界面。

破解 Docker 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于Docker Registry 一鍵部署多方鏡像加速。

??文件準備

本文就4個文件夾,其中2個與證書相關(guān)。

其次是docker-compose.yamlconfig.yml這倆,考慮到部分朋友,我直接從項目下載了放在云盤,點我獲取,提取碼: 8ivv。

本文我僅用到了Docker Hub,因此只需要registry-hub.yml這個配置文件。

破解 Docker 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于Docker Registry 一鍵部署多方鏡像加速。

原本的docker-compose.yaml內(nèi)容很多,可以一鍵部署諸多鏡像加速服務,各位自取所需,我僅以Docker Hub為例,最后修改結(jié)果如下:

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所關(guān)聯(lián)的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'] # 與上面的認證有關(guān),開啟認證需要刪掉#取消注釋 # 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 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于Docker Registry 一鍵部署多方鏡像加速。
破解 Docker 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于Docker Registry 一鍵部署多方鏡像加速。

點擊上傳docker-compose.yamlconfig.yml。

破解 Docker 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于Docker Registry 一鍵部署多方鏡像加速。

輸入命令,確認已經(jīng)上傳完畢。

破解 Docker 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于Docker Registry 一鍵部署多方鏡像加速。

接著輸入以下命令:

docker-compose up -d

配置Nginx


繼續(xù)使用文件管理工具,把證書相關(guān)的兩個文件,上傳至/etc/nginx,此位置為默認位置。

破解 Docker 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于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; } }

英文輸入狀態(tài)下,按i即可進行修改。修改完畢后,按下esc,再同時按下shift+:,英文狀態(tài)輸入wq并回車,即可保存。

重啟Nginx和Docker服務:

systemctl restart nginx systemctl restart docker

使用方面


web輸入docui.ydxian.love即可訪問UI界面,但是缺少很多API支持,目前我覺得意義不大,這個項目后續(xù)就撤掉了。

破解 Docker 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于Docker Registry 一鍵部署多方鏡像加速。

使用方法


??修改daemon.json配置

一勞永逸的方法,SSH控制臺輸入命令:

vim /etc/docker/daemon.json

如圖,修改成你自己的域名,重啟Docker服務即可。

破解 Docker 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于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設置

這里以威聯(lián)通為例:

打開Container Station,點擊左側(cè)存儲庫-添加添加存儲庫進行驗證,名稱隨意,URL格式必須按照下圖所示,結(jié)果是驗證成功,點擊應用。

破解 Docker 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于Docker Registry 一鍵部署多方鏡像加速。

接著點擊左側(cè)欄映像-提取,需要選擇剛添加的庫,還是以數(shù)據(jù)庫項目mysql測試,可以順手把設置為默認勾選上。輸入library/mysql并提取。

破解 Docker 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于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 拉取難題:超穩(wěn)定國內(nèi)鏡像加速服務部署指南!基于Docker Registry 一鍵部署多方鏡像加速。

此時便OK了。

最后


如果各位覺得本篇文章有所幫助,別忘了三連支持下,能點點關(guān)注就更好了!后續(xù)我還會持續(xù)分享各類教程以及有趣好玩的項目。

感謝觀看,本文完。

,

聲明:本站所有文章,如無特殊說明或標注,均為本站原創(chuàng)發(fā)布。任何個人或組織,在未征得本站同意時,禁止復制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進行處理。