Docker Hub 与私有仓库全面对比
什么是 Docker Registry?
Docker Registry 是集中存储和分发 Docker 镜像的系统。它可以类比为 Git 的远程仓库——镜像生产者推送(push),使用者拉取(pull)。
主要 Registry 类型
graph TB
subgraph Registry 生态系统
Public[公共 Registry]
Cloud[云厂商 Registry]
Private[私有部署 Registry]
end
Public --> DH[Docker Hub 官方]
Public --> QC[Quay.io Red Hat]
Public --> GHCR[GitHub Container Registry]
Cloud --> ACR[Azure ACR]
Cloud --> ECR[AWS ECR]
Cloud --> GCR[Google GCR]
Cloud --> TCCR[阿里云 ACR 腾讯云 TCR]
Private --> Harbor[Harbor VMware]
Private --> Nexus[Nexus Repository]
Private --> Jfrog[Artifactory]
Private --> Reg[Docker Registry<br/>官方开源版]
Docker Hub 详解
基本信息
Docker Hub 是 Docker 公司运营的官方公共镜像仓库,也是 Docker 默认的 Registry。
# Docker 默认的拉取地址
docker pull nginx # 等价于 docker pull docker.io/library/nginx
docker pull ubuntu # 等价于 docker pull docker.io/library/ubuntu
Docker Hub 的特点
| 特性 | 免费版 | 付费版 |
|---|---|---|
| 私有仓库 | 1 个 | 不限 |
| 镜像拉取限速 | 200次/6小时(匿名) | 不限 |
| 镜像存储 | 不限(公开) | 不限 |
| 自动构建 | 有限 | 支持 |
常用命令
# 登录
docker login
docker login docker.io -u myusername
# 搜索镜像
docker search nginx --limit 10
# 推送镜像到 Docker Hub
docker tag myapp:latest myusername/myapp:latest
docker push myusername/myapp:latest
# 拉取镜像
docker pull myusername/myapp:latest
私有仓库详解
为什么需要私有仓库?
graph LR
subgraph 使用 Docker Hub 的问题
A[安全问题<br/>源码可能在镜像中]
B[速度问题<br/>跨国下载慢]
C[合规问题<br/>不能将数据放国外]
D[限速问题<br/>匿名拉取有限制]
end
subgraph 私有仓库的解决方案
E[安全可控<br/>数据在内部网络]
F[极速拉取<br/>局域网带宽]
G[合规无忧<br/>数据不出境]
H[无限拉取<br/>内部使用无限制]
end
部署一个简单的私有仓库
# 使用 Docker Registry 官方镜像,1 条命令部署
docker run -d \
-p 5000:5000 \
--name registry \
-v /mnt/registry:/var/lib/registry \
registry:2
# 推送镜像到私有仓库
docker tag nginx:latest localhost:5000/nginx:latest
docker push localhost:5000/nginx:latest
# 从私有仓库拉取
docker pull localhost:5000/nginx:latest
Harbor — 企业级私有仓库
Harbor 是目前最流行的企业级私有仓库方案(CNCF 毕业项目):
| 特性 | Harbor | 官方 Registry |
|---|---|---|
| Web UI | ✅ 图形化管理界面 | ❌ 纯 API |
| 安全扫描 | ✅ 镜像漏洞扫描 | ❌ |
| RBAC | ✅ 角色权限控制 | ❌ |
| 复制策略 | ✅ 跨机房同步 | ❌ |
| 垃圾回收 | ✅ 一键清理 | ✅ 手动 |
| 审计日志 | ✅ 操作可追溯 | ❌ |
| 部署难度 | 中(需要通过配置文件部署) | 易 |
镜像寻址格式
# 完整的镜像地址格式
[Registry地址]/[命名空间]/[镜像名]:[标签]
# 示例
docker.io/library/nginx:latest # Docker Hub 官方镜像
registry.example.com/team/app:v1 # 私有仓库
myregistry.azurecr.io/myapp:v2 # Azure ACR
配置私有仓库的 HTTPS
生产环境的私有仓库必须配置 HTTPS:
# 1. 准备证书
mkdir -p certs
openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout certs/domain.key -x509 -days 365 \
-out certs/domain.crt
# 2. 启动带 TLS 的 Registry
docker run -d \
-p 5000:5000 \
--name registry \
-v $(pwd)/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2
总结
- Docker Hub:适合公开镜像和快速原型开发
- 云厂商 Registry:适合在特定云平台部署,延迟最低
- Harbor 等私有仓库:适合企业内网生产环境
选择建议:个人开发用 Docker Hub 免费版足够;团队协作推荐云厂商的托管服务;企业生产环境务必部署 Harbor 等私有仓库。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


暂无评论内容