核心是用registry:2镜像搭建可控、安全、持久的私有镜像仓库,必须解决存储(挂载宿主机目录并设uid 1000权限)、加密(https强制要求,需挂载tls证书)、认证(htpasswd实现basic auth)三大刚性问题。

用 Docker 搭建私有镜像仓库,核心是选对方案、配好存储、加上基础安全。小团队或开发测试环境推荐官方 registry,轻量快速;中大型企业或需审计、扫描、UI 管理的场景,直接上 Harbor 更省心。
用 registry 快速启动一个基础仓库
这是最简路径,适合本地验证或内网开发环境:
- 拉取并运行 registry 镜像:
docker run -d -p 5000:5000 --restart=always --name registry registry:2.8.1 - 默认数据存在容器内,重启会丢;建议挂载宿主机目录持久化:
-v /data/registry:/var/lib/registry - 推送测试镜像前,先打标签:
docker tag nginx:alpine localhost:5000/my-nginx,再执行docker push localhost:5000/my-nginx - 若在 Docker Desktop 或 macOS/Linux 上使用,需在 Docker 客户端配置信任:把仓库地址(如
localhost:5000)加入 insecure registries 列表,或启用 HTTPS 后配置证书
加 HTTPS 和用户认证提升安全性
HTTP 协议不被现代 Docker 客户端默认允许(除非显式配置为 insecure),生产或跨主机使用必须上 HTTPS,并建议开启认证:
- 生成自签名证书:
mkdir certs && openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt -subj "/CN=localhost" - 启动带 TLS 的 registry:
docker run -d -p 5000:5000 -v $(pwd)/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key registry:2.8.1 - 创建用户名密码文件:
mkdir auth && docker run --entrypoint htpasswd httpd:2 -Bbn testuser testpass > auth/htpasswd - 启动带认证的 registry:
-e REGISTRY_AUTH=htpasswd -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v $(pwd)/auth:/auth
用 Harbor 搭建企业级仓库
Harbor 提供 Web 界面、项目隔离、角色权限、漏洞扫描、镜像复制等完整能力,部署略复杂但长期更可控:
- 下载离线安装包(如
harbor-offline-installer-v2.10.0.tgz),解压后修改harbor.yml:填入域名(如harbor.example.com)、HTTPS 证书路径、管理员密码、数据库与 Redis 配置 - 运行准备脚本:
./prepare,它会生成配置文件和证书(若未提供) - 启动全部服务:
sudo ./install.sh,Harbor 默认监听 80/443 端口,管理界面可通过浏览器访问 - 首次登录后,创建项目(Project),设置成员角色(如 developer、guest),再通过
docker login harbor.example.com推送镜像
日常维护与镜像清理
仓库运行起来只是开始,持续可用需要定期维护:
- registry 自带垃圾回收机制:先停容器,再执行
docker exec registry registry garbage-collect /etc/docker/registry/config.yml清理未被引用的层 - Harbor 自带清理策略(Retention Policy),可在 Web 界面按标签正则、时间范围自动删除旧镜像
- 监控磁盘空间,建议将
/data/registry或 Harbor 的/data目录挂载到独立大容量磁盘 - 备份关键数据:registry 的存储目录、Harbor 的 PostgreSQL 数据库和配置文件(
harbor.yml)











