搭建私有镜像仓库(Registry / Harbor)
用官方 registry 镜像在你的服务器上快速起一个私有仓库,配好 TLS 与登录,并了解 Harbor 的进阶能力。
当你自己构建容器镜像后,往往不希望把它推到公共仓库。私有镜像仓库让镜像留在你可控的服务器上,加快内网拉取速度,也方便配合 CI/CD 与 Kubernetes 使用。
为什么要私有仓库
- 保密:内部镜像不对外公开,避免源码、配置泄露。
- 速度与稳定:从本机房拉取比走公网更快,也不受公共仓库限流影响。
- 合规与留存:镜像版本、扫描结果都握在自己手里。
用官方 registry 镜像快速起一个
官方的 registry:2 镜像就是一个轻量仓库,几行命令即可跑起来。以下命令均在 Ubuntu/Debian 的服务器上执行,假设已装好 Docker。
先准备证书和账号目录:
sudo mkdir -p /opt/registry/{certs,auth,data}
配 TLS
生产环境务必用 TLS。若你有域名,推荐用 Let's Encrypt 签发;测试可自签:
sudo openssl req -x509 -newkey rsa:4096 -days 365 -nodes \
-keyout /opt/registry/certs/domain.key \
-out /opt/registry/certs/domain.crt \
-subj "/CN=registry.example.com" \
-addext "subjectAltName=DNS:registry.example.com"
配登录
用 htpasswd 生成一个账号(bcrypt 加密):
sudo apt-get install -y apache2-utils
htpasswd -Bbn admin 'YourStrongPassword' | sudo tee /opt/registry/auth/htpasswd
启动仓库
docker run -d --restart=always --name registry -p 5000:5000 \
-v /opt/registry/data:/var/lib/registry \
-v /opt/registry/certs:/certs \
-v /opt/registry/auth:/auth \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:2
推送和拉取镜像
先登录,再用 docker tag 打上仓库前缀,然后 push:
docker login registry.example.com:5000
docker tag myapp:1.0 registry.example.com:5000/myapp:1.0
docker push registry.example.com:5000/myapp:1.0
在另一台机器上 pull 回来:
docker login registry.example.com:5000
docker pull registry.example.com:5000/myapp:1.0
客户端信任证书
如果用的是自签证书,客户端会报 x509: certificate signed by unknown authority。需要把证书放到 Docker 信任目录:
sudo mkdir -p /etc/docker/certs.d/registry.example.com:5000
sudo cp domain.crt /etc/docker/certs.d/registry.example.com:5000/ca.crt
注意目录名要与仓库地址和端口完全一致。用受信任 CA(如 Let's Encrypt)签发则无需这一步。切勿用 insecure-registries 关闭校验,那等于放弃加密。
进阶:Harbor
当团队变大,纯 registry 就显得单薄。Harbor 是 CNCF 毕业项目,在 registry 之上提供:
- Web UI 与项目/用户权限(RBAC),可按项目隔离镜像。
- 漏洞扫描(集成 Trivy),推送时自动检测 CVE。
- 镜像签名、复制同步、垃圾回收、审计日志。
Harbor 官方提供离线/在线安装包,编辑 harbor.yml 填好域名与证书后执行 ./install.sh 即可,底层同样基于 Docker Compose。
小结
私有镜像仓库能让你把镜像牢牢握在自己手里。用 registry:2 几分钟即可起一个带 TLS 与登录的最小仓库,掌握 docker tag/push/pull 三步就能日常使用;自签证书记得让客户端信任。团队规模上来后,再迁移到 Harbor 获取 UI、权限与扫描能力。