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_HOSTDOCKER_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 lsdocker 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 exportdocker 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"
頁面選項