镜像加速器
为什么需要镜像加速器
在国内网络环境下,直接从 Docker Hub 拉取镜像经常遇到速度慢、超时甚至无法访问的问题。镜像加速器通过代理、CDN 缓存和优化路由大幅提升拉取速度。
镜像加速器的工作原理
用户请求 → 镜像加速器 → Docker Hub(源站)
↓
缓存层/CDN
直接返回缓存
- 缓存:常用镜像缓存在国内服务器
- CDN:遍布全国的加速节点
- 代理:优化国际带宽和路由
- P2P:部分加速器支持 P2P 分发
配置镜像加速器
修改 Docker 配置
// /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
# 重载配置
sudo systemctl daemon-reload
sudo systemctl restart docker
# 验证配置
docker info | grep -A 5 "Registry Mirrors"
Docker Desktop 配置
# Docker Desktop → Settings → Docker Engine
# 在 daemon.json 中添加 registry-mirrors
国内常用镜像加速器
| 加速器 | 地址 | 特点 |
|---|---|---|
| 阿里云 | https:// |
需注册获取专属地址 |
| 腾讯云 | https://mirror.ccs.tencentyun.com |
腾讯云用户专属 |
| 中科大 | https://docker.mirrors.ustc.edu.cn |
教育网加速好 |
| 网易 | https://hub-mirror.c.163.com |
稳定免费 |
| 百度云 | https://mirror.baidubce.com |
百度云用户使用 |
| DaoCloud | https://docker.mirrors.daocloud.io |
速度尚可 |
阿里云加速器配置
# 1. 访问 https://cr.console.aliyun.com
# 2. 获取专属加速器地址
# 3. 配置 daemon.json
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
# 4. 重启
sudo systemctl daemon-reload
sudo systemctl restart docker
配置多个加速器
{
"registry-mirrors": [
"https://xxxxx.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
Docker 会按顺序尝试,第一个不可用时自动切换到下一个。
Docker Hub 镜像代理
除了配置镜像加速器,还可以使用第三方代理拉取镜像:
# 使用代理地址拉取
docker pull dockerproxy.com/library/nginx:latest
# 或直接配置 Docker 代理
# 设置 HTTP 代理
export HTTP_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=http://proxy.example.com:8080
export NO_PROXY=localhost,127.0.0.1
自建镜像加速器
使用 Docker Registry 缓存
# 启动缓存代理 Registry
docker run -d -p 5000:5000 \
--name mirror-registry \
-v /data/registry:/var/lib/registry \
-e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
registry:2
# 配置 Docker 使用本地缓存
{
"registry-mirrors": ["http://localhost:5000"]
}
使用 Harbor 的代理缓存功能
# Harbor 配置代理缓存
# UI → 新建项目 → 勾选 "启用代理缓存"
# 目标仓库: https://registry-1.docker.io
多平台镜像拉取
# 查看支持的平台
docker buildx ls
# 拉取特定平台镜像
docker pull --platform linux/arm64 nginx:alpine
# 构建多平台镜像
docker buildx build --platform linux/amd64,linux/arm64 -t myapp:latest .
离线环境下的镜像拉取
在没有公网的环境下,可以通过离线方式传输镜像:
# 在有网络的环境下载
docker pull nginx:alpine
docker save nginx:alpine -o nginx.tar
# 将 nginx.tar 传输到离线环境
# 在离线环境加载
docker load -i nginx.tar
docker pull 速度测试
# 测试拉取速度
time docker pull nginx:alpine
# 对比不同加速器
docker pull nginx:alpine --registry-mirror https://xxxxx.mirror.aliyuncs.com
# 使用 speedtest 测试网络
curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python
常见问题
# 问题:拉取超时
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled
# 解决:
# 1. 检查网络连接
# 2. 配置镜像加速器
# 3. 重试
# 问题:证书错误
Error: failed to do request: x509: certificate is valid for ...
# 解决:检查 DNS 解析是否正确
# 问题:加速器不可用
# 解决:多配置几个备用加速器
最佳实践
- 配置至少 2-3 个镜像加速器:避免单点故障
- 定期测试加速器速度:选择最优的
- 国内用户必须配置加速器:否则拉取速度极慢
- 考虑自建缓存仓库:多节点场景更高效
- 使用 pinned 版本:避免突然的版本变化
- 预拉取常用镜像:提前拉取到节点
镜像加速器是 Docker 在国内环境下的必要配置,能显著提升开发和部署效率。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


暂无评论内容