> ## Documentation Index
> Fetch the complete documentation index at: https://felimet-hub.jmcores.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Docker Hub 與映像來源

> Docker Hub 是什麼、registry 概念、官方與社群映像的信任層級、登入與推拉，以及拉取次數限制。

`Docker` `Docker Hub`

`docker pull` 的映像從哪來、怎麼判斷一個映像可不可信，這頁講清楚。

## registry 與命名

Docker Hub 是 Docker 官方的雲端映像 **registry**（映像的集中倉庫，概念類比 npm 之於 Node 套件）。每個映像放在一個 repository 內，repo 內用 **tag** 區分版本。完整命名格式：

```
[registry]/[使用者或組織]/[repo]:[tag]

python:3.12-slim                  # Docker 官方映像（registry 與 library 前綴省略）
someuser/myapp:v1.0               # 個人 / 組織 repo
myregistry.local:5000/test:1.0    # 自架 registry
```

省略 `:tag` 等同 `:latest`，在 Dockerfile 與生產環境**避免使用 latest**（見 [選擇映像](/notes/docker/dockerfile/images/)）。

## 三種信任層級

不是所有映像都可信。看三個層級判斷：

| 類別                     | 識別                                           | 維護者                                    |
| ---------------------- | -------------------------------------------- | -------------------------------------- |
| Docker Official Images | 路徑無使用者前綴（`python`、`ubuntu`、`postgres`）、有官方徽章 | Docker 直接策展，遵循 Dockerfile 最佳實踐、近乎無 CVE |
| Verified Publisher     | 有「Verified Publisher」徽章，路徑帶廠商名               | 經 Docker 審核的商業廠商                       |
| 社群映像                   | 格式 `username/image`、無徽章                      | 個別使用者，可信度靠下載數與聲譽自行判斷                   |

判斷步驟：先看路徑格式（有沒有使用者前綴），再到 Hub 頁面確認徽章，最後看下載數與更新頻率。

## Public 與 Private

|      | Public         | Private                  |
| ---- | -------------- | ------------------------ |
| 可見性  | 任何人可 pull，無需登入 | 僅授權帳號可存取                 |
| 免費方案 | 無限 public repo | 1 個 private repo（個人免費方案） |

## 登入、推、拉

```bash theme={null}
docker pull python:3.12-slim                 # 拉官方映像
docker pull someuser/myapp:v1.0              # 拉使用者 repo

docker login                                 # 登入（device code flow，瀏覽器確認）
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin   # CI 用，避免密碼進 shell 歷史

docker tag myapp:latest user/myapp:v1.0      # push 前先 tag 成正確格式
docker push user/myapp:v1.0                  # 推到自己的 repo
```

官方安全建議：設定 credential store，不要讓認證資訊明文存在 `~/.docker/config.json`。

## 拉取次數限制（截至 2026-06）

| 帳號類型                        | Pull 限制                       | 週期     |
| --------------------------- | ----------------------------- | ------ |
| 匿名（未登入）                     | 100 次 / 每個 IPv4 或 IPv6 /64 子網 | 每 6 小時 |
| 認證的免費帳號                     | 200 次                         | 每 6 小時 |
| 付費方案（Pro / Team / Business） | 無限制                           | —      |

<Warning>
  超出限制會回 HTTP 429（Too Many Requests）。CI 環境最容易踩到，標準解法：`docker login` 後拉取（從匿名 100 升到 200）、升級付費方案，或在內網架 pull-through cache（用官方 `registry` 映像的 proxy 模式）。
</Warning>

## 接下來

* [Docker CLI 指令](/notes/docker/guide/cli/)：pull / push / images 的完整用法。
* [選擇別人的映像](/notes/docker/dockerfile/images/)：信任層級與 Python 版本變體怎麼選。

官方參考：[docs.docker.com/docker-hub/usage](https://docs.docker.com/docker-hub/usage/)
