Docker Context 管理多個遠端主機
你有沒有遇過一個情況:你想在本地執行 docker ps 查看本機容器,接著又想在「遠端 Linux 伺服器」上執行 docker logs 查看報錯?
傳統做法可能是先 SSH 登入伺服器,或者是設定複雜的 DOCKER_HOST 環境變數。現在,我們有更好的解決方案:Docker Context。
什麼是 Docker Context?
Docker Context 允許你在本地的 Docker CLI 中,快速地切換操作目標(也就是切換不同的 Docker 引擎)。
你可以定義多個 Context(例如:local, staging, production),並在它們之間無縫切換。這樣一來,你只需在自己的電腦終端機上輸入指令,就能直接操控位於世界各地的伺服器。
核心優勢
- 無感切換:不需要反覆登入登出遠端伺服器。
- 安全第一:預設透過 SSH 連線,不需要暴露危險的 Docker TCP 埠號。
- 配置簡化:整合本地的 SSH 配置,管理更優雅。
- 全域生效:切換後,所有 Docker 相關工具(如 Compose, Buildx)都會自動指向該目標。
實戰:建立與切換 Context
假設你有一台遠端伺服器 (IP: 1.2.3.4),且你已經可以透過 SSH 登入它。
1. 建立新 Context
你可以直接使用 SSH 連線字串,或更進階地,直接套用你在 ~/.ssh/config 中定義的主機別名:
# 使用連線字串
docker context create staging --docker "host=ssh://user@1.2.3.4"
# 使用 SSH Config 原有的 Alias (推薦)
docker context create production --docker "host=ssh://prod-server-alias"
2. 切換操作目標
你可以設定全域預設,也可以單次指令切換:
# 切換全域預設目標
docker context use staging
# 現在執行的所有 docker 指令都會在 staging 伺服器上
docker ps
# 或是:單次指令指定目標(不改變目前的 Context)
docker --context production ps
3. 使用環境變數靈活切換
如果你在開發腳本中需要臨時切換目標,可以使用 DOCKER_CONTEXT 環境變數:
DOCKER_CONTEXT=staging docker compose up -d
進階應用:Remote Builder (Buildx)
Docker Context 最強大的一點是它能與 Buildx 結合。如果你本地的電腦(如 MacBook)效能不足,或者你想在編譯時直接利用伺服器的網路頻寬,你可以把 Context 設為遠端 Builder:
# 建立一個指向遠端 Context 的 builder
docker buildx create --name remote-builder staging --use
# 現在建置映像檔時,實際上是在遠端伺服器上運行的
docker buildx build -t my-image .
搭配 Docker Compose 使用
當你切換 Context 後,Compose 會自動將本地的專案設定,部署到該目標伺服器。
docker context use production
docker compose up -d
Compose 會讀取本地的 docker-compose.yml,但在執行階段所有的容器建立、網路設定與磁碟掛載,都會發生在 production 伺服器上。
常用管理指令速查
| 功能 | 指令 |
|---|---|
| 列出所有 Context | docker context ls |
| 手動建立 | docker context create [名稱] --docker "host=..." |
| 切換目標 | docker context use [名稱] |
| 檢視詳細資訊 | docker context inspect [名稱] |
| 刪除設定 | docker context rm [名稱] |
總結
Docker Context 將開發者的視野從單一主機提升到了整個叢集架構。只要配置好 SSH,你就能在本地終端機完成全世界伺服器的容器部署與維運,是邁向進階 DevOps 的必經之路。