镜像加速器

镜像加速器

为什么需要镜像加速器

在国内网络环境下,直接从 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://.mirror.aliyuncs.com 需注册获取专属地址
腾讯云 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 解析是否正确

# 问题:加速器不可用
# 解决:多配置几个备用加速器

最佳实践

  1. 配置至少 2-3 个镜像加速器:避免单点故障
  2. 定期测试加速器速度:选择最优的
  3. 国内用户必须配置加速器:否则拉取速度极慢
  4. 考虑自建缓存仓库:多节点场景更高效
  5. 使用 pinned 版本:避免突然的版本变化
  6. 预拉取常用镜像:提前拉取到节点

镜像加速器是 Docker 在国内环境下的必要配置,能显著提升开发和部署效率。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容