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:
- GitHub Packages (GHCR):整合 GitHub Action 最佳選擇,網址通常為
ghcr.io。 - Amazon ECR (AWS):與 AWS 體系高度整合。
- Google Container Registry (GCR/Artifact Registry):GCP 使用者首選。
- Azure Container Registry (ACR):微軟 Azure 體系首選。
總結
Registry 是團隊協作的中心。小型專案使用 Docker Hub 的免費方案即可,大型企業通常會選擇雲端付費方案或自行架設(如 Harbor)。