6.1 Docker Hub
6.1.1 什麼是 Docker Hub
Docker Hub 是 Docker 的中央映象倉庫,透過它您可以輕鬆地分享和獲取 Docker 映象。
Docker Hub 是 Docker 官方維護的公共映象倉庫,也是全球最大的容器映象函式庫。
它提供了:
- 官方映象:由 Docker 官方和軟體廠商 (如 Nginx,MySQL,Node.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 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 錯誤,建議:
- 先甄別具體是哪類限流:普通的 pull rate limit 只要在 CI 中設定
docker login(並使用有效賬號) 就能解除匿名限制。- 如果是 Abuse 頻控導致,應考慮搭建私有倉庫作為拉取快取代理 (Registry pull-through cache),避免頻繁直接請求官方 Hub。
- 使用國內映象加速器。
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)!這會導致憑證直接暴露在系統的指令歷史、程序清單和終端輸出中。
- 在 Docker Hub -> Account Settings -> Security -> Access Tokens 建立 Token (PAT)。
- 將 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 會自動執行建立。不要把它作為新架構的預設方案。