大家好,我是羊刀仙。
國內(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端口全部打開(個人習慣),各位可以逐個開放。
通過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)建證書
,如下圖所示。
接著修改最下面的證書有效期,選擇15年,其它保持默認即可,點擊創(chuàng)建
。
創(chuàng)建兩個記事本文件,復制下面的源證書和私鑰保存,分別命名為.pem
和.key
,我這里選擇以域名前綴,保存為ydxian.pem
和ydxian.key
。
密鑰只會顯示這一次,如果忘了存,那就吊銷新建一個。
接著點擊左側(cè)欄DNS
,選擇記錄
,添加幾個DNS記錄,這里建議添加倆,docker.ydxian.love
和docui.ydxian.love
,一個作為鏡像加速,一個作為UI界面。
??文件準備
本文就4個文件夾,其中2個與證書相關(guān)。
其次是docker-compose.yaml
和config.yml
這倆,考慮到部分朋友,我直接從項目下載了放在云盤,點我獲取,提取碼: 8ivv。
本文我僅用到了Docker Hub,因此只需要registry-hub.yml
這個配置文件。
原本的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-compose.yaml
和config.yml
。
輸入命令,確認已經(jīng)上傳完畢。
接著輸入以下命令:
docker-compose up -d
配置Nginx
繼續(xù)使用文件管理工具,把證書相關(guān)的兩個文件,上傳至/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; } }
英文輸入狀態(tài)下,按i
即可進行修改。修改完畢后,按下esc
,再同時按下shift
+:
,英文狀態(tài)輸入wq
并回車,即可保存。
重啟Nginx和Docker服務:
systemctl restart nginx systemctl restart docker
使用方面
web輸入docui.ydxian.love
即可訪問UI界面,但是缺少很多API支持,目前我覺得意義不大,這個項目后續(xù)就撤掉了。
使用方法
??修改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設置
這里以威聯(lián)通為例:
打開Container Station,點擊左側(cè)存儲庫
-添加
添加存儲庫進行驗證,名稱隨意,URL格式必須按照下圖所示,結(jié)果是驗證成功,點擊應用
。
接著點擊左側(cè)欄映像
-提取
,需要選擇剛添加的庫,還是以數(shù)據(jù)庫項目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了。
最后
如果各位覺得本篇文章有所幫助,別忘了三連支持下,能點點關(guān)注就更好了!后續(xù)我還會持續(xù)分享各類教程以及有趣好玩的項目。
感謝觀看,本文完。
,