搭建docker私有仓库是围绕安全、可靠、可维护、可扩展展开的系统性工程,需满足ci/cd、多团队协作与合规审计等生产需求;裸registry仅适用于验证或小规模试用,生产环境必须配置https、认证与审计,企业级场景推荐直接采用harbor。
搭建 docker 私有仓库不是简单运行一条 docker run 命令,而是围绕安全、可靠、可维护、可扩展四个核心目标展开的系统性工程。它既要解决“能不能用”的基础问题,更要支撑 ci/cd 流水线、多团队协作和合规审计等真实生产需求。
为什么必须自建私有仓库?
公共仓库(如 Docker Hub)在开发初期看似方便,但进入团队协作或生产阶段后,会暴露明显短板:
- 安全不可控:敏感镜像上传即暴露,无细粒度权限、无操作审计、无漏洞扫描能力
- 网络不可靠:国内拉取慢、超时、限速频繁,CI 构建失败率升高
- 管理不可溯:无法锁定镜像版本、无法追溯谁在何时推送了哪个 tag、无法强制签名验证
- 合规不满足:金融、政务、医疗等行业明确要求镜像数据本地化存储与全链路加密
基础部署:Registry 容器快速启动
官方 registry:2 镜像是最轻量的起点,适合验证流程或小规模试用:
docker run -d \ --name registry \ -p 5000:5000 \ -v /data/registry:/var/lib/registry \ --restart=always \ -e REGISTRY_STORAGE_DELETE_ENABLED=true \ registry:2.8.1
关键说明:
-
-v /data/registry:/var/lib/registry:必须挂载宿主机目录,否则容器重启后所有镜像丢失 -
REGISTRY_STORAGE_DELETE_ENABLED=true:默认禁用删除接口,开启后才能执行docker image rm或 API 删除 - 首次使用前需在客户端配置信任:
"insecure-registries": ["<em>your-ip</em>:5000"]加入/etc/docker/daemon.json并重启 Docker
生产必备:HTTPS + 认证 + 审计
裸 Registry 不可用于生产。三者缺一不可:
- HTTPS:防止镜像传输被中间人劫持。用 OpenSSL 生成证书后,通过环境变量注入:
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ -v $(pwd)/certs:/certs
-
认证:用
htpasswd生成用户文件,启动时启用 htpasswd 认证:
-e REGISTRY_AUTH=htpasswd \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -v /auth:/auth
-
审计:Registry 自身不记录日志细节。建议前置 Nginx,开启
log_format记录请求 IP、时间、方法、镜像名、状态码,日志接入 ELK 或 Loki
进阶选型:Harbor 比原生 Registry 更适合企业
当团队超过 5 人、项目超 20 个、需对接 LDAP/AD 或 SSO 时,应直接选用 Harbor —— 它是 CNCF 毕业项目,提供开箱即用的企业级能力:
- 图形化 Web 界面,支持项目级权限(推/拉/管理员/访客)
- 内置 Clair/Trivy 扫描器,自动检测 CVE 漏洞并阻断高危镜像推送
- 镜像复制策略:跨数据中心同步、主从仓库容灾、公有云→私有缓存
- 内容信任(Notary)集成:强制镜像签名,确保来源可信
- 完整审计日志:记录用户、IP、时间、操作对象、结果,导出为 CSV 或对接 SIEM
安装方式推荐使用官方 Helm Chart(K8s 环境)或离线安装包(物理机/VM),避免手动配置 harbor.yml 出错。











