ZOT 极简而强大的 Docker OCI 镜像仓库


发布者 ourjs  发布时间 1782807744223
关键字 云原生 

Zot 仓库简介

Zot 是一个为云原生时代设计的、极简而强大的 OCI 镜像仓库,功能纯粹、部署简单、资源占用极低的私有仓库。

第一步:挂载数据目录(持久化存储)

为了让镜像数据在容器重启或删除后不丢失,需要将容器内的数据目录映射到宿主机的目录。

1. 创建宿主机目录

首先,在宿主机上创建用于存放数据和配置的目录:

# 创建数据目录和配置目录
mkdir -p /data/zot/data
mkdir -p /data/zot/etc

第二步:配置用户名密码认证

Zot支持多种认证方式,最常用的是基于htpasswd文件的HTTP基本认证。

1. 生成 htpasswd 密码文件

使用htpasswd命令创建密码文件。必须使用 -B 参数进行bcrypt加密,因为Zot要求使用bcrypt。

# 安装 htpasswd 工具 (如果未安装)
# Ubuntu/Debian: apt install apache2-utils

# 创建密码文件并添加第一个用户
htpasswd -B -c /data/zot/etc/htpasswd ocean-dev
  • -B:强制使用bcrypt加密。
  • -c:创建新文件。如果要添加更多用户,则去掉-c参数:
    htpasswd -B /data/zot/etc/htpasswd another-username
    

2. 创建Zot配置文件

创建/data/zot/etc/config.json文件,写入以下内容:

nano /data/zot/etc/config.json

{
  "distSpecVersion": "1.0.1",
  "storage": {
    "rootDirectory": "/var/lib/registry"
  },
  "http": {
    "address": "0.0.0.0",
    "port": "5000",
    "compat": ["docker2s2"],
    "auth": {
      "htpasswd": {
        "path": "/etc/zot/htpasswd"
      }
    }
  },
  "extensions": {
    "ui": {
      "enable": true
    },
    "search": {
      "enable": true
    }
  }
}
  • storage.rootDirectory: 指定数据存储目录,应与容器内挂载路径一致。
  • http.compat: 添加"docker2s2"以确保兼容Docker客户端。
  • http.auth.htpasswd.path: 指向容器内的htpasswd文件路径。
  • http.accessControl (可选): 用于细粒度的权限控制。

Zot 的 Web 界面是一个可选功能,需要在配置文件中显式开启。 extensions.ui 和 extensions.search

访问界面:在浏览器中访问 http://<你的服务器IP>:5000 即可。

如果先前已配置了用户认证(如 htpasswd),访问 Web 界面时也需要登录。

3. 使用配置文件启动容器

结合端口映射,一个基本的运行命令如下:

docker run -d \
  --name zot-registry \
  -p 5000:5000 \
  -v /data/zot/data:/var/lib/registry \
  -v /data/zot/etc:/etc/zot \
  ghcr.io/project-zot/zot-linux-amd64:latest

4. 添加非安全仓库配置

Windows: 找到 Docker 鲸鱼图标,右键点击,选择 Settings(设置)-> 选择 Docker Engine

Linux服务器: nano /etc/docker/daemon.json

添加配置:

{
  "insecure-registries": [
    "10.4.96.14:5000"
  ]
}

第三步:验证和使用

1. 登录仓库

docker login localhost:5000

输入你创建的用户名和密码。

2. 推送镜像

# 给本地镜像打标签
docker tag redis:latest localhost:5000/my-redis:v1

# 推送镜像
docker push localhost:5000/my-redis:v1

3. 拉取镜像

docker pull localhost:5000/my-redis:v1








  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA