概述
在國內(nèi),拉取 Docker 鏡像速度慢/時不時斷線/無賬號導(dǎo)致限流等,比較痛苦??. 這里提供加速/優(yōu)化的幾種方法。
梳理一下,會碰到以下情況:
- 國內(nèi)下載速度慢/時不時斷線:是因為網(wǎng)絡(luò)被限制了。
- 沒有公共鏡像庫賬號導(dǎo)致限流:是因為 Docker Hub 等主流鏡像庫,近年來紛紛開始對未登錄的匿名用戶進行限流,限制拉取的速度,以及一定時間內(nèi)拉取的鏡像數(shù)量。
為了解決以上問題,有這么幾種方法:
針對國內(nèi)下載速度慢/時不時斷線, 可選方法如下:
- 配置國內(nèi)可用/速度尚可的 Docker Registry Mirrors
- 自建 Docker Registry Mirror/Proxy, 并配置為 Mirror
- Docker Daemon 配置
proxies
針對沒有公共鏡像庫賬號導(dǎo)致限流, 可選方法如下:
- 注冊各個鏡像庫賬號并
docker login
登錄
具體方案如下。
具體方案
??Notes:
這里以 Docker 舉例說明。
Containerd/Podman/cri-o 等請舉一反三。
- 配置國內(nèi)可用/速度尚可的 Docker Registry Mirrors
- 阿里云 Docker 加速:類似
xxxxxx.mirror.aliyuncs.com
的個人專屬加速地址; - DockerProxy 代理加速:
dockerproxy.com
- 百度云 Mirror:
mirror.baidubce.com
- ...
- 阿里云 Docker 加速:類似
- 自建 Docker Registry Mirror/Proxy, 并配置為 Mirror
- 這里使用 Cloudflare Worker - cloudflare-docker-proxy 搭建
- Docker Daemon 配置
proxies
, 具體包括:http-proxy
https-proxy
no-proxy
- 注冊各個鏡像庫賬號并
docker login
登錄
方案實施細節(jié)
配置國內(nèi)可用的 Docker Registry Mirrors
隨著時間的推移,國內(nèi)可用的 Docker Registry Mirrors 會持續(xù)發(fā)生變化,因此,需要實時根據(jù)可用情況調(diào)整 Docker Registry Mirrors 配置。
截止 2023/9/5, 可用 Mirrors 列表如下:
- 阿里云 Docker 加速:類似
xxxxxx.mirror.aliyuncs.com
的個人專屬加速地址; - DockerProxy 代理加速:
dockerproxy.com
- 百度云 Mirror:
mirror.baidubce.com
- DaoCloud:
docker.m.daocloud.io
- 南京大學(xué):
docker.nju.edu.cn
- 上海交大:
docker.mirrors.sjtug.sjtu.edu.cn
測試國內(nèi) Docker Registry 可用性
可以自行測試驗證,手動測試方法是拉取鏡像,這里以測試 dockerproxy.com
為例:
docker pull dockerproxy.com/library/nginx
在國內(nèi)拉取成功則證明可用。
也可以直接查看 GitHub 倉庫:docker-practice/docker-registry-cn-mirror-test 的 Github Action 執(zhí)行結(jié)果。如最近一次的執(zhí)行結(jié)果為:
阿里云 Docker 加速服務(wù)申請
阿里云加速器(點擊管理控制臺 -> 登錄賬號 -> 右側(cè)鏡像工具 -> 鏡像加速器 -> 復(fù)制加速器地址)
截圖如下:
其他幾個加速域名
- DockerProxy 代理加速:
dockerproxy.com
- 百度云 Mirror:
mirror.baidubce.com
- Daocloud:
docker.m.daocloud.io
- 南京大學(xué):
docker.nju.edu.cn
- 上海交大:
docker.mirrors.sjtug.sjtu.edu.cn
都是固定域名,直接配置即可。
已經(jīng)不可用的 Docker 加速域名
以下 Docker 加速域名,已經(jīng)因為各種原因不可用或只允許對應(yīng)云供應(yīng)商網(wǎng)絡(luò)使用,包括:
- 163:
hub-mirror.c.163.com
- USTC:
docker.mirrors.ustc.edu.cn
- 騰訊云:
mirror.ccs.tencentyun.com
- Azure 中國:
dockerhub.azk8s.cn
- 七牛云:
reg-mirror.qiniu.com
- Docker CN:
registry.docker-cn.com
Docker Registry Mirror 配置
創(chuàng)建或修改 /etc/docker/daemon.json
:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-EOF
{
"registry-mirrors": [
"https://<changme>.mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
自建 Docker Registry Mirror/Proxy
前提
- 有 Cloudflare 賬號
- (可選)有自定義的域名,且域名托管在 Cloudflare 上
- Cloudflare Workers 額度足夠
cloudflare-docker-proxy
這里使用 Cloudflare Worker - cloudflare-docker-proxy 搭建。原文 README 步驟有一些問題,可以參考這篇 README.md 來實施。
這里以自定義域名配置方式舉例, 步驟如下:
-
Fork Repo
-
Deploy 按鈕對應(yīng) URL 調(diào)整為您自己的 repo url
-
修改
src/index.js
的const routes
塊的內(nèi)容const routes = { "docker.your-domain.com": "https://registry-1.docker.io", "quay.your-domain.com": "https://quay.io", "gcr.your-domain.com": "https://k8s.gcr.io", "k8s-gcr.your-domain.com": "https://k8s.gcr.io", "ghcr.your-domain.com": "https://ghcr.io", };
-
點擊 "Deploy" 按鈕部署,部署后如下:
-
在 Cloudflare 的 DNS 記錄里添加
CNAME
指向部署后的${workername}.${username}.workers.dev
地址。如下: -
在 Workers 的 HTTP Routes 里,添加
xxx.your-domain.com/*
路由指向 cloudflare-docker-proxy, xxx 就是docker
quay
gcr
等,如下:
完成。
Docker Registry Mirror 配置
將配置后的 docker.<your-domain>.com
Mirror 添加到 /etc/docker/daemon.json
的 registry-mirrors
中并重啟 Docker 生效。
Docker Daemon 配置 proxies
如果不想設(shè)置 Mirrors, 還可以配置 proxies
, 實現(xiàn)通過 proxies
拉取 Docker Hub 鏡像。
前提
- 有一個 Proxy, 可以穩(wěn)定訪問到 Docker Hub
Docker Daemon 配置
vi /etc/docker/daemon.json
, 添加如下內(nèi)容:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-EOF
{
"proxies": {
"http-proxy": "http://<proxy-ip>:7890",
"https-proxy": "http://<proxy-ip>:7890",
"no-proxy": "*.cn,127.0.0.0/8,192.168.0.0/16,172.16.0.0/12,10.0.0.0/8"
}
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
??Notes:
Docker Daemon 里的
no-proxy
, 是支持 CIDR 格式的.
完成。
注冊各個鏡像庫賬號并登錄
包括不限于:
- Docker Hub
- Quay.io
- GHCR.io (GitHub 的 Docker registry)
- gcr.io (Google Cloud 的 Registry)
- ...
注冊后,視情況不同,有的可以直接通過密碼登錄,有的需要申請 Token/Service Account 等專用密碼。
注冊過程略。
docker login
登錄
Docker Hub 登錄:
echo "<password>" | docker login --username <username> --password-stdin'
其他 Docker Registry 登錄:
echo "<password>" | docker login quay.io --username <username> --password-stdin
echo "<password>" | docker login ghcr.io --username <username> --password-stdin
echo "<password>" | docker login gcr.io --username <username> --password-stdin
或者,也可以直接寫入 ~/.docker/config.json
文件:
{
"auths": {
"ghcr.io": {
"auth": "<auth>"
},
"https://index.docker.io/v1/": {
"auth": "<auth>"
},
"quay.io": {
"auth": "<auth>"
}
}
}
<auth>
通過如下方式獲得:
echo -n '<username>:<password>' | base64
結(jié)束。
總結(jié)
通過以上方法,相信您能在國內(nèi)使用 Docker 得心應(yīng)手。文章來源:http://www.zghlxwxcb.cn/news/detail-704781.html
三人行, 必有我?guī)? 知識共享, 天下為公. 本文由東風(fēng)微鳴技術(shù)博客 EWhisper.cn 編寫.文章來源地址http://www.zghlxwxcb.cn/news/detail-704781.html
到了這里,關(guān)于Docker 鏡像庫國內(nèi)加速的幾種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!