Docker 的 Mirror 仅能加速 docker.io 的镜像,而不能加速私有仓库的镜像。
1. 为什么需要一个私有的镜像仓库 mirror
- 公网限速
- dockerhub 拉取限制频率
- 减少拉取镜像时间
2. 创建一个 Registry 镜像加速服务
- 生成一个配置文件
version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
但这样启动的服务只能作为 Registry 而不是 Mirror。Registry 是用来存储镜像,直接对外提供服务;Mirror 使从 Registry 拿到镜像数据再转给 Client。
- 添加 proxy 字段到 config.yml 文件中
在 config.yml 可以配置很多特征,比如验证秘钥、存储后端等。这里仅添加 proxy 字段,最终的 config.yml 内容如下:
version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
proxy:
remoteurl: https://registry-1.docker.io
如果使用到私有的镜像,可以按照如下格式填入账户密码,但这里的 remoteurl 不支持自建的私有仓库,只能填 Docker 官方仓库。这在官方文档: https://docs.docker.com/registry/recipes/mirror/ 有给出说明。
|
|
- 启动镜像服务
创建存储目录
|
|
启动服务
docker run -d -p 5000:5000 --restart=always --name mirror \
-v `pwd`/config.yml:/etc/docker/registry/config.yml \
-v `pwd`/data:/var/lib/registry \
registry:2
查看服务
|
|
3. 也可用 Dragonfly 的 Mirror 模式
- 新增一个配置文件 dfget.yaml
|
|
|
|
- 新增存储目录
|
|
- 启动 Dfdaemoan 服务
|
|
这里不需要再部署 Dragonfly 的其他服务,而且 Dfdaemon 组件能对镜像进行生命周期管理,这是比 Registry 具有优势的地方。
4. Docker Daemon 配置镜像加速源
- 修改 Docker 的配置文件 daemon.json
在 /etc/docker/daemon.json 文件中,增加镜像源
|
|
live-restore 为 true 时,重启 Docker 不会影响正在运行的容器。
- 重新加载配置
|
|
- 查看 Docker 配置
|
|
- 测试拉取镜像
|
|
- 查看缓存数据大小
|
|
5. 总结
本篇主要使用 Registry、Dragonfly 两种方案搭建了 docker.io 的 Mirror 加速服务。
两种方式简单,易于维护,在办公网、IDC 网络下,都能极大加速 docker.io 的镜像拉取,节省流量费用。