{T}

Docker Registry 私有仓库搭建

概述

Docker Registry 是 Docker 官方提供的镜像存储和分发系统。本文详解私有 Registry 的搭建流程、镜像推送/拉取操作、认证配置及镜像代理缓存。

学习目标

  1. 理解私有 Registry 的使用场景
  2. 掌握 Docker Registry 的搭建和基本操作
  3. 了解认证配置和 HTTPS 安全访问

一、为什么需要私有 Registry

原因说明
安全性敏感镜像不应推送到公有仓库
经济性云服务商个人版配额有限
网络限制内网环境无法访问公网

方案对比

方案优点缺点适用
Docker Hub免费、官方国内慢开源项目
阿里云 ACR国内快配额有限中小项目
私有 Registry无限制、内网需自己维护企业推荐

二、搭建 Registry

启动容器

bash
docker run -d \
  -p 5000:5000 \
  --name registry \
  --restart=always \
  -v registry-data:/var/lib/registry \
  registry:2

验证运行

bash
# 查看仓库列表(初始为空)
curl http://127.0.0.1:5000/v2/_catalog
# {"repositories":[]}

三、基本操作

推送镜像

bash
# 1. 打标签
docker tag nginx:latest 192.168.1.100:5000/nginx:latest

# 2. 推送
docker push 192.168.1.100:5000/nginx:latest

# 3. 验证
curl http://192.168.1.100:5000/v2/_catalog
# {"repositories":["nginx"]}

拉取镜像

bash
docker pull 192.168.1.100:5000/nginx:latest

API 接口

API说明
GET /v2/_catalog所有仓库列表
GET /v2/<name>/tags/list镜像标签列表
DELETE /v2/<name>/manifests/<digest>删除镜像

四、配置非 HTTPS 访问

Docker 默认要求 HTTPS,私有 Registry 使用 HTTP 时需配置信任:

bash
# 编辑 Docker daemon 配置
sudo vi /etc/docker/daemon.json
json
{
  "insecure-registries": ["192.168.1.100:5000"]
}
bash
# 重启 Docker
sudo systemctl restart docker

五、认证配置

使用 htpasswd 认证

bash
# 创建认证文件
mkdir -p auth
docker run --rm --entrypoint htpasswd httpd:2 -Bbn user password > auth/htpasswd

# 启动带认证的 Registry
docker run -d \
  -p 5000:5000 \
  --name registry \
  --restart=always \
  -v registry-data:/var/lib/registry \
  -v $(pwd)/auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
  registry:2

登录使用

bash
docker login 192.168.1.100:5000
# 输入用户名和密码

六、数据持久化

bash
# 使用数据卷持久化镜像数据
docker run -d \
  -p 5000:5000 \
  --name registry \
  --restart=always \
  -v /data/registry:/var/lib/registry \
  registry:2
目录说明
/var/lib/registry/docker/registry/v2/镜像存储路径
repositories/各仓库目录
blobs/镜像层数据

常见问题

问题解决方案
push 报 HTTP 错误配置 insecure-registries
认证失败检查 htpasswd 文件路径和权限
磁盘空间不足定期执行垃圾回收
容器重启数据丢失使用 -v 数据卷持久化

延伸阅读