Docker 環境
簡介
本指南展示了如何使用 Context 來管理單一客戶端中的多個 Docker Daemon。
每個 Context 都包含管理 Daemon 資源所需的所有資訊。docker context 指令可以輕鬆設定這些 Context 並在它們之間切換。
舉例來說,單一 Docker 客戶端可以設定兩個 Context:
- 在本機運行的預設 (default) Context
- 遠端共享的 Context
一旦設定好這些 Context,您就可以使用 docker context use <context-name> 指令在它們之間進行切換。
先決條件
要依照本指南中的範例操作,您需要:
- 支援最上層
context指令的 Docker 客戶端
執行 docker context 來驗證您的 Docker 客戶端是否支援 Context。
Context 的結構
Context 是數個屬性的組合,包括:
- 名稱與說明
- 端點 (Endpoint) 設定
- TLS 資訊
若要列出可用的 Context,請使用 docker context ls 指令。
$ docker context ls
NAME DESCRIPTION DOCKER ENDPOINT ERROR
default * unix:///var/run/docker.sock
這會顯示一個名為 "default" 的 Context。它被設定為透過本機 /var/run/docker.sock Unix Socket 與 Daemon 通訊。
NAME 欄位中的星號 (*) 表示這是當前啟用的 Context。這意味著除非透過環境變數(如 DOCKER_HOST 和 DOCKER_CONTEXT)覆寫,或在命令列中使用 --context 和 --host 旗標,否則所有 docker 指令都會針對此 Context 執行。
使用 docker context inspect 來進一步深入了解。以下範例顯示如何檢查名為 default 的 Context。
$ docker context inspect default
[
{
"Name": "default",
"Metadata": {},
"Endpoints": {
"docker": {
"Host": "unix:///var/run/docker.sock",
"SkipTLSVerify": false
}
},
"TLSMaterial": {},
"Storage": {
"MetadataPath": "\u003cIN MEMORY\u003e",
"TLSPath": "\u003cIN MEMORY\u003e"
}
}
]
建立新的 Context
您可以使用 docker context create 指令建立新的 Context。
以下範例建立了一個名為 docker-test 的新 Context,並將其 Host 端點指定為 TCP Socket tcp://docker:2375。
$ docker context create docker-test --docker host=tcp://docker:2375
docker-test
Successfully created context "docker-test"
新的 Context 儲存在 ~/.docker/contexts/ 下的 meta.json 檔案中。您建立的每個新 Context 都會在 ~/.docker/contexts/ 的專屬子目錄中擁有自己的 meta.json。
您可以使用 docker context ls 和 docker context inspect <context-name> 來檢視新的 Context。
$ docker context ls
NAME DESCRIPTION DOCKER ENDPOINT ERROR
default * unix:///var/run/docker.sock
docker-test tcp://docker:2375
當前的 Context 會以星號 ("*") 標示。
使用不同的 Context
您可以使用 docker context use 在 Context 之間進行切換。
以下指令會將 docker CLI 切換為使用 docker-test Context。
$ docker context use docker-test
docker-test
Current context is now "docker-test"
透過列出所有 Context 並確保星號 ("*") 位於 docker-test Context 前方,來驗證操作是否成功。
$ docker context ls
NAME DESCRIPTION DOCKER ENDPOINT ERROR
default unix:///var/run/docker.sock
docker-test * tcp://docker:2375
docker 指令現在將針對 docker-test Context 中定義的端點執行。
您也可以使用 DOCKER_CONTEXT 環境變數來設定當前 Context。環境變數會覆寫使用 docker context use 設定的 Context。
使用下方合適的指令,透過環境變數將 Context 設定為 docker-test。
> $env:DOCKER_CONTEXT='docker-test'$ export DOCKER_CONTEXT=docker-test
執行 docker context ls 以確認 docker-test Context 現在是啟用狀態。
您也可以使用全域 --context 旗標來覆寫 Context。以下指令使用了名為 production 的 Context。
$ docker --context production container ls
匯出與匯入 Docker Contexts
您可以使用 docker context export 和 docker context import 指令在不同主機上匯出與匯入 Context。
docker context export 指令會將現有的 Context 匯出到檔案。該檔案可以在任何安裝了 docker 客戶端的主機上匯入。
匯出與匯入 Context
以下範例匯出了名為 docker-test 的現有 Context。它將被寫入一個名為 docker-test.dockercontext 的檔案。
$ docker context export docker-test
Written file "docker-test.dockercontext"
檢查匯出檔案的內容。
$ cat docker-test.dockercontext
在另一台主機上使用 docker context import 匯入此檔案,以建立具有相同設定的 Context。
$ docker context import docker-test docker-test.dockercontext
docker-test
Successfully imported context "docker-test"
您可以使用 docker context ls 驗證 Context 是否已匯入。
匯入指令的格式為 docker context import <context-name> <context-file>。
更新 Context
您可以使用 docker context update 更新現有 Context 中的欄位。
以下範例更新了現有 docker-test Context 中的描述欄位。
$ docker context update docker-test --description "Test context"
docker-test
Successfully updated context "docker-test"