动机和必要性
2020 年11 月20 日,Docker Hub 基于个人IP 地址对匿名和免费认证的用户进行了镜像拉取次数的限制。
各大国内的Docker Hub镜像站停止同步、或者关闭外部访问服务。(2022-08-24 阿里云的 Docker Hub 镜像不再更新)
基于以上原因,搭建一个私用的Docker Hub缓存势在必行。
基于的镜像和文档
hub.docker.com/_/registry (registry是docker官方发布的镜像)
mirrors.ustc.edu.cn/help/docker…
搭建步骤
- 编写配置文件
config.yml
version: 0.1
log:
level: error
storage:
delete:
enabled: true
cache:
blobdescriptor: redis
filesystem:
rootdirectory: /var/lib/registry
maintenance:
uploadpurging:
enabled: false
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
proxy:
remoteurl: https://registry-1.docker.io
# 更换为上游的地址。
redis:
addr: redis:6379
- 编写compose文件
docker-compose.yml
version: "3"
networks:
default:
name: my_dockerhub
driver: bridge
services:
redis:
image: redis:alpine
container_name: redis
restart: on-failure:3
command: --maxmemory 512m
registry:
image: registry:2
container_name: registry
restart: on-failure:3
volumes:
- ./registry/data:/var/lib/registry
- ./registry/config.yml:/etc/docker/registry/config.yml:ro
ports:
- "8083:5000"
depends_on:
- redis
./registry/data目录用于存放镜像等数据
./registry/config.yml是registry应用的配置文件
此处端口映射到了8083
建好目录,放置好各文件后,使用docker-compose up -d启动即可
使用方式
修改/etc/docker/daemon.json。(和我们使用各大镜像站的方式一样)
{
"registry-mirrors": [
"http://omv.lan:8083/"
]
}
此处的omv.lan是我的nas服务器,实际使用时需要自行改成对应服务器的ip或者域名。
演示
先查看现有的镜像:
curl http://omv.lan:8083/v2/_catalog
此时只有webdav一个镜像。(先前push的,本来应该是空的)
然后在配置了镜像的Docker Desktop上做pull:
再次查看现有的镜像:
可以看到registry中已经存储了对应的镜像缓存。