Docker Contexts
簡介
本指南介紹瞭如何使用 Contexts 從單個客戶端管理 Docker Daemon。
每個 Context 都包含管理 Daemon 上資源所需的所有資訊。docker context
命令使得配置這些 Context 並在其之間切換變得容易。
例如,單個 Docker 客戶端可以配置兩個 Context
- 本地執行的預設 Context
- 遠端共享 Context
配置好這些 Context 後,您可以使用 docker context use <context-name>
命令在它們之間進行切換。
先決條件
要遵循本指南中的示例,您需要
- 支援頂級
context
命令的 Docker 客戶端
執行 docker context
以驗證您的 Docker 客戶端是否支援 Contexts。
Context 的組成
Context 是幾個屬性的組合。這些屬性包括
- 名稱和描述
- 端點配置
- TLS 資訊
要列出可用的 Contexts,請使用 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
命令都在此 Context 下執行,除非使用 DOCKER_HOST
和 DOCKER_CONTEXT
等環境變數,或在命令列中使用 --context
和 --host
標誌進行覆蓋。
使用 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
命令建立新的 Contexts。
以下示例建立了一個名為 docker-test
的新 Context,並將其主機端點指定為 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 都有自己的 meta.json
,儲存在 ~/.docker/contexts/
的專用子目錄中。
您可以使用 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
在 Contexts 之間切換。
以下命令將切換 docker
CLI 以使用 docker-test
Context。
$ docker context use docker-test
docker-test
Current context is now "docker-test"
透過列出所有 Contexts 並確保星號 ("*") 位於 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
標誌覆蓋 Context。以下命令使用名為 production
的 Context。
$ docker --context production container ls
匯出和匯入 Docker Contexts
您可以使用 docker context export
和 docker context import
命令在不同的主機上匯出和匯入 Contexts。
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 中的 description 欄位。
$ docker context update docker-test --description "Test context"
docker-test
Successfully updated context "docker-test"