自建 Docker Hub 镜像缓存

1,289 阅读1分钟

动机和必要性

2020 年11 月20 日,Docker Hub 基于个人IP 地址对匿名和免费认证的用户进行了镜像拉取次数的限制。

各大国内的Docker Hub镜像站停止同步、或者关闭外部访问服务。(2022-08-24 阿里云的 Docker Hub 镜像不再更新)

基于以上原因,搭建一个私用的Docker Hub缓存势在必行。

基于的镜像和文档

hub.docker.com/_/registryregistry是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.ymlregistry应用的配置文件

此处端口映射到了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

图片.png

此时只有webdav一个镜像。(先前push的,本来应该是空的)

然后在配置了镜像的Docker Desktop上做pull

图片.png

再次查看现有的镜像:

图片.png

可以看到registry中已经存储了对应的镜像缓存。