Files
docker_practice/06_repository/6.1_dockerhub.md
T
yeasy b81816bb07 fix(content): 修正已随上游变化失效的版本事实与镜像引用
深审发现 14 处正文与上游现状不符(另有 4 处在 .agent/ 本地记忆,不入库)。
全部经官方一手源核验,并由独立复核者逐条尝试证伪后保留。

**Docker Content Trust 已从 CLI 移除(本书基线正是 Engine 29.x)**
- 18.6:`docker trust`、`DOCKER_CONTENT_TRUST` 的示例此前标为“历史用法”,
  但未说明命令在 29.x 上根本不存在。Engine 29.0 release notes 原文:
  "Docker Content Trust was removed from the Docker CLI";实测 docker/cli
  的 cli/trust 包在 v28.5.0 返回 200、v29.0.0 返回 404
- 2.3、18.6:DCT 不再是“弃用阶段、时间线待公布”——官方 retired 页已给出
  完整时间表(notary.docker.io 2026-12-08 关闭)
- 注意:`--disable-content-trust` 是 MarkDeprecated(隐藏但仍接受为 no-op),
  不是“不可用”。初版提议写成不可用,经复核纠正后才落地

**etcd 维护分支写反了**
- 15_etcd README/15.1/15.2 均称“3.5 已退出维护窗口”,但 2026-07-23 官方与
  v3.7.1、v3.6.14 同批发布了 v3.5.33,公告称三个分支均在维护;3.4 EOL 也应
  是 2026-06(v3.4.45),非 5 月

**其他上游变化**
- 17.6:containerd 首个 2.x LTS 是 2.0(2024-11-05 起),非 2.3
- 6.4:`sonatype/nexus3:3.69` 这个 tag 从不存在(Sonatype 用三段式),改 3.69.0
- appendix/repo/centos:`rockylinux` 官方镜像已冻结(最后推送 2024-05-30),
  改用官方指引的 `rockylinux/rockylinux`(2026-07-12 仍在更新)
- 6.2/6.3:docs.docker.com/registry/ 已 301 到 retired 页,改指
  distribution.github.io(实测 200)
- 6.1:`docker search centos` 的示例输出补上上游现有的 DEPRECATED 标记

**刻意未改**:`minio/minio` 虽在 Docker Hub 标记 archived,但提议替换的
quay.io/minio/minio 最新 tag 停在 2024-07-31,比 Docker Hub 的 2025-09-07
更旧,照改会把读者引向更陈旧的仓库,留待作者定夺。

验证:check_project_rules 202 文件全过、emphasis 全过、40 测试通过、format 干净。
2026-07-28 20:12:47 -07:00

5.5 KiB
Raw Blame History

6.1 Docker Hub

6.1.1 什么是 Docker Hub

Docker Hub 是 Docker 的中央镜像仓库,通过它您可以轻松地分享和获取 Docker 镜像。

Docker Hub 是 Docker 官方维护的公共镜像仓库,也是全球最大的容器镜像库。

它提供了:

  • 官方镜像:由 Docker 官方和软件厂商 (如 NginxMySQLNode.js) 维护的高质量镜像。
  • 个人/组织仓库:用户可以上传自己的镜像。
  • 自动构建:与 GitHub/Bitbucket 集成的历史功能,Docker 已标记为 deprecated,并计划于 2027-04-01 完全退役。
  • Webhooks:镜像更新时触发回调。

6.1.2 核心功能

1. 搜索镜像

我们可以通过 docker search 命令来查找官方仓库中的镜像,并利用 docker pull 命令来将它下载到本地。

除了网页搜索,也可以使用命令行:

$ docker search centos
NAME      DESCRIPTION                                  STARS     OFFICIAL
centos    DEPRECATED; The official build of CentOS.    7000+     [OK]

技巧:始终优先使用 OFFICIAL 标记为 [OK] 的镜像,安全性更有保障。

2. 拉取镜像

$ docker pull nginx:alpine

3. 推送镜像

需要先登录:

$ docker login

## 默认情况下,不带其它参数进行 docker login 会自动走 Device Code Web Flow (浏览器认证)
## 若在非交互 CI 环境中,推荐结合 --username 与 --password-stdin 参数使用

...

打标签并推送:

## 1. 标记镜像

$ docker tag myapp:v1 username/myapp:v1

## 2. 推送

$ docker push username/myapp:v1

6.1.3 限制与配额

镜像拉取限制

Docker Hub 对不同类型用户实施拉取速率限制(基于 6 小时周期):

用户类型 限制
匿名用户 (未登录) 每 6 小时 100 次请求
免费账户 (已登录) 每 6 小时 200 次请求
Pro/Team/Business 账户 无限制(公平使用政策)

注意Docker 曾计划于 2025 年 4 月调整拉取限制策略,但在 2025 年 2 月宣布取消该计划。目前付费订阅用户享有无限制拉取额度,匿名用户和免费账户的限制保持不变。建议在 CI/CD 环境中始终配置 docker login 以获得更高的拉取额度。

滥用限流

除了上述针对特定账号拉取镜像数量的 Pull Rate Limit 之外,Docker Hub 对所有用户(包含已认证及付费用户)还实施了 滥用保护限流 (Abuse Rate Limiting)。它是根据网络出口 IP (IPv4 或 IPv6 /64 子网) 计算整体请求频率,阈值动态触发(通常为每分钟数千级别请求)。

两类的差异与排查方法

  • Pull Rate Limit:针对拉取量达到上限。报错返回 429 Too Many Requests,并且 HTTP 返回体/CLI 错误提示中会带有明确的 toomanyrequests: You have reached your pull rate limit 提示,常附有账户升级链接。
  • Abuse Rate Limit:防范接口频率打击。报错仅返回简化的 429 Too Many Requests。这一限流不分付费与否,常发生在“多终端共享出口 IP”的企业局域网或者第三方云 CI 服务(如 GitHub Actions 等)中,即使你已正常配置 docker login 也依旧可能触发。

提示:如果在 CI/CD 等环境遇到 429 错误,建议:

  1. 先甄别具体是哪类限流:普通的 pull rate limit 只要在 CI 中配置 docker login (并使用有效账号) 就能解除匿名限制。
  2. 如果是 Abuse 频控导致,应考虑搭建私有仓库作为拉取缓存代理 (Registry pull-through cache),避免频繁直接请求官方 Hub。
  3. 使用国内镜像加速器。

6.1.4 安全最佳实践

1. 启用 2FA:双因素认证

为了保护您的 Docker Hub 账号安全,我们建议采取以下措施。

在 Account Settings -> Security 中启用 2FA,保护账号安全。启用后,CLI 登录需要使用 Access Token 而非密码。

2. 使用 Access Token

⚠️ 警告:绝不要在脚本或 CI/CD 系统中,直接使用 -p 参数传递密码或 Token (类似 docker login -p xxx)!这会导致凭证直接暴露在系统的命令历史、进程列表和终端输出中。

  1. 在 Docker Hub -> Account Settings -> Security -> Access Tokens 创建 Token (PAT)。
  2. 将 Token 保存在权限受限的本地文件或 CI secret 中,再通过标准输入 (stdin) 传递给 Docker,避免把真实 Token 写进脚本、命令历史或日志:
$ chmod 600 "$HOME/.dockerhub-token"
$ cat "$HOME/.dockerhub-token" | docker login --username username --password-stdin

3. 关注镜像漏洞

Docker Hub 提供 Docker Scout 安全扫描功能。官方镜像的漏洞扫描结果对所有用户免费可见。Docker Scout 的持续扫描功能在免费层可以覆盖 1 个私有仓库,付费用户可以扫描更多仓库。在镜像标签页可以看到漏洞扫描结果。


6.1.5 Webhooks

当镜像被推送时,可以自动触发 HTTP 回调 (例如通知 CI 系统部署)。

配置方法 仓库页面 -> Webhooks -> Create Webhook。


6.1.6 自动构建

⚠️ Docker Hub Automated Builds 已被 Docker 标记为 deprecated,并计划于 2027-04-01 完全退役;新项目应优先使用 GitHub Actions、Buildx 或自有 CI 构建并推送镜像。

对于仍在迁移期内的旧仓库,链接 GitHub/Bitbucket 仓库后,当代码有提交或打标签时,Docker Hub 会自动运行构建。不要把它作为新架构的默认方案。