# 构建自定义 Registry

URL: https://caijiao.org/docker/advanced/custom-registry
Source: docs/docker/advanced/custom-registry.md
Description: 本章节介绍如何搭建和管理 Docker 私有 Registry，包括部署自定义 Registry、配置存储与访问权限、镜像推送与拉取流程，以及安全与备份策略，满足企业内部镜像管理需求。

Docker Registry 是用于存储和分发镜像的服务。搭建自定义 Registry 可以方便企业内部管理镜像，提高镜像安全性和访问速度。

## 1. 部署自定义 Registry

- 使用官方 Registry 镜像：

```bash
docker run -d -p 5000:5000 --name registry \
  -v /opt/registry/data:/var/lib/registry \
  registry:2
````

- 参数说明：

  - `-p 5000:5000`：映射本地端口
  - `-v /opt/registry/data:/var/lib/registry`：持久化存储镜像数据
  - `registry:2`：官方 Registry 镜像

## 2. 推送和拉取镜像

- 给本地镜像打标签：

```bash
docker tag myapp localhost:5000/myapp:latest
```

- 推送到私有 Registry：

```bash
docker push localhost:5000/myapp:latest
```

- 拉取镜像：

```bash
docker pull localhost:5000/myapp:latest
```

## 3. 配置访问权限

- 使用 Nginx 或 Traefik 反向代理，并开启 HTTPS
- 配置基本认证：

```bash
docker run -d -p 443:443 --name registry-auth \
  -v /auth:/auth \
  -v /certs:/certs \
  registry:2
```

- 用户凭证通过 `htpasswd` 创建：

```bash
htpasswd -Bbn username password > auth/htpasswd
```

## 4. 存储与备份策略

- 持久化存储镜像数据到主机目录或云存储
- 定期备份 `/var/lib/registry` 目录
- 配合清理策略删除旧镜像，节省空间：

```bash
registry garbage-collect /etc/docker/registry/config.yml
```

## 5. 高可用和扩展

- 支持多节点部署
- 使用负载均衡分发请求
- 可结合 Kubernetes 部署 Registry 集群

## 6. 最佳实践

- 使用 HTTPS 和认证保护 Registry
- 对重要镜像启用签名验证
- 定期扫描 Registry 中镜像的安全漏洞
- 使用版本标签管理镜像，避免使用 latest 标签直接上线

---

通过构建自定义 Registry，企业可以实现内部镜像管理、安全控制和高效分发，提升 Docker 容器化应用的部署效率与安全性。
