Docker Hub 與私有 Registry 管理

當你製作好了一個完美的 Docker 映像檔,你要如何把它分享給同事,或是發布到雲端伺服器上?這就需要用到 Registry (映像檔倉庫)

什麼是 Registry?

Registry 是一個用於儲存、分發與版本管理 Docker 映像檔的服務。

  • Public Registry (公有倉庫):任何人都可以存取,如 Docker Hub
  • Private Registry (私有倉庫):僅供特定團隊或企業內部使用。

實戰:將映像檔推送至 Docker Hub

這是最常見的分發方式。

1. 註冊與登入

首先你需要去 Docker Hub 官網註冊一個帳號。接著在終端機登入:

docker login

2. 標記映像檔 (Tagging)

Docker Hub 的映像檔命名規則必須包含你的「使用者名稱」。

# 格式:docker tag [本地名稱] [使用者名稱/存放庫名稱:標記]
docker tag my-web:v1.0 mikelee/my-web:v1.0

3. 推送 (Push)

docker push mikelee/my-web:v1.0

推送成功後,你在任何一台有裝 Docker 的電腦執行 docker pull mikelee/my-web:v1.0 就能下載你的作品了。

建立自己的私有 Registry

如果你不希望將映像檔放在網路上,或者公司內部頻寬限制需要更快的傳輸速度,你可以自己跑一個 Registry。

事實上,Registry 本身就是一個 Docker 映像檔!

1. 啟動 Registry 服務

docker run -d \
  -p 5000:5000 \
  --name local-registry \
  --restart always \
  -v registry-data:/var/lib/registry \
  registry:2

2. 向私有倉庫推送映像檔

# 標記主機位址 (這裡假設是 localhost:5000)
docker tag nginx:latest localhost:5000/my-nginx:v1

# 推送
docker push localhost:5000/my-nginx:v1

3. 從私有倉庫下載

docker pull localhost:5000/my-nginx:v1
非 HTTPS 的安全警告: 預設情況下,Docker 基於安全考慮禁止向沒有 SSL 憑證的 Registry 推送。如果你是內部開發測試,需要在 daemon.json 加入以下設定: { "insecure-registries": ["localhost:5000"] } 然後重啟 Docker。

主流的第三方 Registry 服務

除了自行架設,許多雲端平台也提供了現成的伺服器級 Registry:

  1. GitHub Packages (GHCR):整合 GitHub Action 最佳選擇,網址通常為 ghcr.io
  2. Amazon ECR (AWS):與 AWS 體系高度整合。
  3. Google Container Registry (GCR/Artifact Registry):GCP 使用者首選。
  4. Azure Container Registry (ACR):微軟 Azure 體系首選。

總結

Registry 是團隊協作的中心。小型專案使用 Docker Hub 的免費方案即可,大型企業通常會選擇雲端付費方案或自行架設(如 Harbor)。