
> 注意:这篇文章具有一定专业性,推荐开发者或运维人员阅读,不建议新手小白尝试!!!
什么是Zot?
Zot 就是一个像 Docker Hub 一样的容器镜像仓库,但它是轻量级、私有的,你可以随便部署在自己的服务器上。它专门用来存储和分发你的容器镜像,也可以用来加速Docker hub镜像,从而解决国内无法拉取Docker镜像的问题。
**Zot具有以下特点**
- **私有镜像存储**:在自己的服务器上搭建私有的 Docker 镜像仓库,团队内部安全共享。
- **镜像推送与拉取**:完全兼容 Docker 命令,像使用 Docker Hub 一样
push 和 pull。- **安全漏洞扫描**:自动检查镜像里的已知安全风险,提前发现隐患。
- **权限访问控制**:支持用户认证和授权,谁可以推、谁可以拉,由你掌控。
- **垃圾数据清理**:自动回收无用的镜像层和冗余数据,节省存储空间。
- **数据去重**:相同内容只存一份,避免重复占用磁盘。
- **跨平台支持**: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进行登录。
> 注意:如果你想使用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省资源、部署简单,配置文件虽然需要花点心思,但一次配好就能一劳永逸。
* Zot官网:https://zotregistry.dev/
* Zot开源地址:https://github.com/project-zot/zot