核心是用registry:2镜像快速启动服务,并必须补足持久化、认证和加密三环节;基础命令为docker run -d -p 5000:5000 --restart=always --name registry -v /data/registry:/var/lib/registry registry:2,客户端需配置insecure-registries并docker tag/push验证。

搭建本地私有镜像仓库 Registry,核心是用官方 registry:2 镜像快速启动服务,并补足持久化、认证和加密三个关键环节。跳过任意一项,都可能在开发测试阶段看似正常,到团队协作或上线时暴露问题。
基础部署:一条命令启动,但必须挂载存储
直接运行容器最简单,但默认数据存在容器内,重启即丢失:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
生产或长期使用必须加 -v 挂载宿主机目录,例如:
- 创建目录:
mkdir -p /data/registry - 启动时挂载:
-v /data/registry:/var/lib/registry - 注意权限:Registry 进程以 UID 1000 运行,执行
chown -R 1000:1000 /data/registry
客户端推送前:重命名 + 处理 TLS 信任
本地仓库默认走 HTTP,而 Docker 客户端强制要求 HTTPS,除非显式声明为不安全注册表:
- 重命名镜像(格式必须含
host:port):docker tag nginx:alpine localhost:5000/my-nginx - 配置 Docker daemon 允许不安全连接:
编辑/etc/docker/daemon.json,加入:
{"insecure-registries":["localhost:5000"]}
然后重启:sudo systemctl restart docker - 推送:
docker push localhost:5000/my-nginx
生产环境加固:HTTPS + 用户认证缺一不可
对外提供服务或多人共用时,必须启用 TLS 和访问控制:
-
TLS 证书:可自签(开发)或用 Let’s Encrypt(生产)。证书需挂载进容器,并通过环境变量指定路径:
-v ./certs:/certs,再设置:-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -
用户认证:用
htpasswd生成密码文件:mkdir auth && docker run --rm --entrypoint htpasswd httpd:2 -Bbn user pass > auth/htpasswd
启动时挂载并启用:-v ./auth:/auth,-e REGISTRY_AUTH=htpasswd,-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd - 客户端需先登录:
docker login localhost:5000
验证与日常管理
服务启动后,可通过 API 快速确认是否就绪:
- 查看仓库中所有镜像:
curl -X GET http://localhost:5000/v2/_catalog?n=10(返回空列表说明正常) - 查看某镜像的标签:
curl -X GET http://localhost:5000/v2/my-nginx/tags/list - 清理旧镜像:Registry 不自带自动清理功能,需借助
registry garbage-collect命令配合配置文件触发


















