当前位置: 首页 > Linux运维 > Docker > 使用Zot搭建私有容器镜像仓库,搞定Docker镜像加速

使用Zot搭建私有容器镜像仓库,搞定Docker镜像加速

发布于:2026-6-16 Docker 0条评论 46 views
本站提供Linux服务器运维,自动化脚本编写等服务,如有需要请联系博主微信:xiaozme

在用上 Zot 之前,xiaoz 一直用 Nexus 3 搭建容器镜像仓库。但这个重量级工具内存占用高,上手复杂,出了问题也不好排查。现在,xiaoz 已经彻底告别 Nexus 3,投入 Zot 的怀抱了。

CleanShot 2026-06-16 at 14.44.35@2x.png

注意:这篇文章具有一定专业性,推荐开发者或运维人员阅读,不建议新手小白尝试!!!

什么是Zot?

Zot 就是一个像 Docker Hub 一样的容器镜像仓库,但它是轻量级、私有的,你可以随便部署在自己的服务器上。它专门用来存储和分发你的容器镜像,也可以用来加速Docker hub镜像,从而解决国内无法拉取Docker镜像的问题。

Zot具有以下特点

  • 私有镜像存储:在自己的服务器上搭建私有的 Docker 镜像仓库,团队内部安全共享。
  • 镜像推送与拉取:完全兼容 Docker 命令,像使用 Docker Hub 一样 pushpull
  • 安全漏洞扫描:自动检查镜像里的已知安全风险,提前发现隐患。
  • 权限访问控制:支持用户认证和授权,谁可以推、谁可以拉,由你掌控。
  • 垃圾数据清理:自动回收无用的镜像层和冗余数据,节省存储空间。
  • 数据去重:相同内容只存一份,避免重复占用磁盘。
  • 跨平台支持:Linux、Mac、树莓派等都能跑,云上、本地、边缘环境通吃。
  • 极简部署:整个软件就是一个单文件,下载即用,无需安装依赖或额外服务。

使用Docker Compose部署Zot

下面xiaoz将根据我的实际需求出发,然后使用Docker Compose部署Zot

1、生成密码文件

Zot支持多种用户认证方式,最简单的就是使用Basic认证,先用下面的命令生成htpasswd文件:

docker run --rm httpd:alpine htpasswd -Bbn username password > ./htpasswd
  • username:改成你自己的用户名
  • password:改成你自己的密码

2、编写配置文件

说实话,虽然Zot这个软件本身比较轻量,但Zot的配置还是蛮复杂的,xiaoz在结合AI的情况折腾了半天才编写出符合自己需求的配置。

先来说说我的需求:

  • 加速Docker官方和GitHub容器镜像仓库,使国内网络能够正常拉取
  • 建立自己的私有容器镜像仓库

如果您和xiaoz的需求一样,那么恭喜你,可以直接抄作业了,先新建一个config.json,内容如下:

{
    "storage": {
        "rootDirectory": "/var/lib/registry",
        "commit": true,
        "dedupe": true,
        "gcInterval": "24h",
        "retention": {
            "policies": [
                {
                    "repositories": [
                        "username/**"
                    ],
                    "deleteUntagged": true,
                    "keepTags": [
                        {
                            "patterns": ".*"
                        }
                    ]
                },
                {
                    "repositories": [
                        "**"
                    ],
                    "deleteUntagged": true,
                    "keepTags": [
                        {
                            "pushedWithin": "24h",
                            "pulledWithin": "24h"
                        }
                    ]
                }
            ]
        }
    },
    "http": {
        "address": "0.0.0.0",
        "port": "5000",
        "auth": {
            "htpasswd": {
                "path": "/etc/zot/htpasswd"
            }
        },
        "accessControl": {
            "repositories": {
                "**": {
                    "defaultPolicy": [
                        "read",
                        "create",
                        "update",
                        "delete"
                    ]
                }
            }
        }
    },
    "extensions": {
        "sync": {
            "enable": true,
            "registries": [
                {
                    "urls": [
                        "https://ghcr.io"
                    ],
                    "onDemand": true,
                    "tlsVerify": true,
                    "maxRetries": 3,
                    "retryDelay": "5m",
                    "content": [
                        {
                            "prefix": "**"
                        }
                    ]
                },
                {
                    "urls": [
                        "https://registry-1.docker.io"
                    ],
                    "onDemand": true,
                    "tlsVerify": true,
                    "maxRetries": 3,
                    "retryDelay": "5m"
                }
            ]
        },
        "search": {
            "enable": true,
            "cve": {
                "updateInterval": "2h"
            }
        },
        "ui": {
            "enable": true
        }
    }
}

注意:上面的username改成你自己的用户名(参考上面的第一个步骤),更多配置参数可以参考官方文档:https://zotregistry.dev/v2.1.17/admin-guide/admin-configuration/

3、创建compose.yaml文件,内容如下:

services:
  zot:
    image: ghcr.io/project-zot/zot-linux-amd64:latest
    container_name: reg_xphub
    restart: always
    ports:
      - "5000:5000"
    volumes:
      - ./config.json:/etc/zot/config.json:ro
      - ./htpasswd:/etc/zot/htpasswd:ro
      - ./data:/var/lib/registry

最后输入docker compose up -d启动,并访问WebUI:http://IP:5000进行登录。

CleanShot 2026-06-16 at 14.45.34@2x.png

注意:如果你想使用Zot来解决国内无法拉取Docker镜像的问题,你应该将Zot部署到海外服务器!!!

使用

由于Docker客户端默认不支持http,我们可以通过反向代理http://IP:5000来配置SSL证书,使其支持https

注意:如果您使用CDN来配置,CDN请不要设置缓存,否则可能导致认证出现异常!!!

SSL证书配置成功后,我们就可以使用Docker的命令行进行登录:docker login pub.tcp.mk

注意:pub.tcp.mk改成你自己的域名,前面不需要加https://,末尾也不需要路径。

然后再拉取镜像:

docker pull pub.tcp.mk/helloz/zmark

结语

如果您也想搭建一个轻量、私有的容器镜像仓库,或者需要加速国内Docker镜像拉取,不妨试试Zot。相比Nexus 3/Harbor这类重型工具,Zot省资源、部署简单,配置文件虽然需要花点心思,但一次配好就能一劳永逸。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注