Docker Hub 与私有仓库全面对比

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
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容