最快最轻量的私有仓库搭建方式是用docker官方registry镜像,但必须规避数据不持久、无认证、无https三大陷阱:先运行docker run -d --name registry -p 5000:5000 --restart=always registry:2.8.1启动基础服务,再挂载-v /data/registry:/var/lib/registry实现持久化,最后通过nginx反向代理配置https与htpasswd认证确保安全合规。

直接用 Docker 官方 registry 镜像搭建私有仓库,是最快、最轻量、也最符合生产规范的方式。关键不在于“能不能跑起来”,而在于是否规避了默认配置的三大陷阱:数据不持久、无认证、无 HTTPS。下面按实战逻辑分步说明。
基础运行:先让 registry 跑起来
执行这条命令即可启动一个基础服务(监听本机 5000 端口):
docker run -d \ --name registry \ -p 5000:5000 \ --restart=always \ registry:2.8.1
验证是否工作正常:
curl -I http://localhost:5000/v2/
看到 HTTP/1.1 200 OK 和 Docker-Distribution-API-Version: registry/2.0 就表示服务已就绪。
必须加的持久化存储
默认情况下,镜像全存在容器内部——容器删了,所有镜像就没了。生产环境绝不能跳过这步。
- 创建专用目录(推荐路径清晰、权限可控):
mkdir -p /data/registry - 挂载到容器内标准路径:
-v /data/registry:/var/lib/registry - 完整启动命令示例:
docker run -d \ --name registry \ -p 5000:5000 \ -v /data/registry:/var/lib/registry \ --restart=always \ registry:2.8.1
这样重启、重部署都不会丢失已有镜像。
生产环境必备:HTTPS + 认证
裸跑在 5000 端口,既不安全也不被 Docker 客户端默认信任(会报 http: server gave HTTP response to HTTPS client 错误)。推荐用 Nginx 反向代理实现 HTTPS 和基础认证:
- 申请或生成 SSL 证书(如用 Let’s Encrypt 或自签名)
- Nginx 配置片段示例:
server { listen 443 ssl; server_name reg.example.com; ssl_certificate /etc/nginx/ssl/reg.crt; ssl_certificate_key /etc/nginx/ssl/reg.key; location / { proxy_pass http://localhost:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } - 配合 htpasswd 添加用户:
htpasswd -c /etc/nginx/.htpasswd admin
并在 Nginx 中加入auth_basic "Registry Realm"; auth_basic_user_file /etc/nginx/.htpasswd;
之后就能用 docker login reg.example.com 登录,再 push/pull 镜像。
进阶建议:监控与清理
长期运行后,镜像堆积会导致磁盘告警。registry 本身不提供自动清理功能,需手动或脚本干预:
- 列出所有仓库:
curl -X GET https://reg.example.com/v2/_catalog?n=100 - 查看某仓库 tag 列表:
curl -X GET https://reg.example.com/v2/myapp/tags/list - 删除特定 manifest(需开启
delete功能,启动时加-e REGISTRY_STORAGE_DELETE_ENABLED=true) - 推荐搭配 registry-cli 工具做批量清理
另外,建议在宿主机上配置 logrotate 和磁盘使用率告警,避免静默填满根分区。











