Docker 上下文

介紹

本指南介紹瞭如何使用上下文從單個客戶端管理 Docker 守護程式。

每個上下文都包含管理守護程式上資源所需的所有資訊。docker context 命令可以輕鬆配置這些上下文並在它們之間切換。

例如,單個 Docker 客戶端可以配置兩個上下文

  • 在本地執行的預設上下文
  • 遠端共享上下文

配置好這些上下文後,可以使用 docker context use <context-name> 命令在它們之間切換。

先決條件

要遵循本指南中的示例,您需要

  • 支援頂級 context 命令的 Docker 客戶端

執行 docker context 以驗證您的 Docker 客戶端是否支援上下文。

上下文的構成

上下文是幾個屬性的組合。其中包括

  • 名稱和描述
  • 端點配置
  • TLS 資訊

要列出可用的上下文,請使用 docker context ls 命令。

$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT               ERROR
default *                                             unix:///var/run/docker.sock

這將顯示名為“default”的單個上下文。它配置為透過本地 /var/run/docker.sock Unix 套接字與守護程式通訊。

NAME 列中的星號表示這是活動上下文。這意味著所有 docker 命令都將針對此上下文執行,除非使用環境變數(如 DOCKER_HOSTDOCKER_CONTEXT)或在命令列中使用 --context--host 標誌進行覆蓋。

使用 docker context inspect 進行更深入的瞭解。以下示例顯示瞭如何檢查名為 default 的上下文。

$ 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"
        }
    }
]

建立新的上下文

可以使用 docker context create 命令建立新的上下文。

以下示例建立一個名為 docker-test 的新上下文,並將該上下文的宿主端點指定為 TCP 套接字 tcp://docker:2375

$ docker context create docker-test --docker host=tcp://docker:2375
docker-test
Successfully created context "docker-test"

新上下文儲存在 ~/.docker/contexts/ 下的 meta.json 檔案中。您建立的每個新上下文都會在 ~/.docker/contexts/ 的專用子目錄中儲存其自己的 meta.json

可以使用 docker context lsdocker context inspect <context-name> 檢視新上下文。

$ docker context ls
NAME          DESCRIPTION                             DOCKER ENDPOINT               ERROR
default *                                             unix:///var/run/docker.sock
docker-test                                           tcp://docker:2375

當前上下文用星號 (“*”) 表示。

使用不同的上下文

可以使用 docker context use 在上下文之間切換。

以下命令將使 docker CLI 使用 docker-test 上下文。

$ docker context use docker-test
docker-test
Current context is now "docker-test"

透過列出所有上下文並確保星號 (“*”) 位於 docker-test 上下文旁來驗證操作。

$ docker context ls
NAME            DESCRIPTION                           DOCKER ENDPOINT               ERROR
default                                               unix:///var/run/docker.sock
docker-test *                                         tcp://docker:2375

docker 命令現在將針對 docker-test 上下文中定義的端點。

您還可以使用全域性 DOCKER_CONTEXT 環境變數設定當前上下文。環境變數將覆蓋使用 docker context use 設定的上下文。

使用以下適當的命令使用環境變數將上下文設定為 docker-test


> $env:DOCKER_CONTEXT='docker-test'
$ export DOCKER_CONTEXT=docker-test

執行 docker context ls 以驗證 docker-test 上下文現在是否為活動上下文。

您還可以使用全域性 --context 標誌來覆蓋上下文。以下命令使用名為 production 的上下文。

$ docker --context production container ls

匯出和匯入 Docker 上下文

可以使用 docker context exportdocker context import 命令在不同的主機上匯出和匯入上下文。

docker context export 命令將現有上下文匯出到檔案。該檔案可以在安裝了 docker 客戶端的任何主機上匯入。

匯出和匯入上下文

以下示例匯出名為 docker-test 的現有上下文。它將被寫入名為 docker-test.dockercontext 的檔案。

$ docker context export docker-test
Written file "docker-test.dockercontext"

檢查匯出檔案的內容。

$ cat docker-test.dockercontext

在另一臺主機上使用 docker context import 匯入此檔案以建立具有相同配置的上下文。

$ docker context import docker-test docker-test.dockercontext
docker-test
Successfully imported context "docker-test"

可以使用 docker context ls 驗證上下文是否已匯入。

匯入命令的格式為 docker context import <context-name> <context-file>

更新上下文

可以使用 docker context update 更新現有上下文中的欄位。

以下示例更新現有 docker-test 上下文中的描述欄位。

$ docker context update docker-test --description "Test context"
docker-test
Successfully updated context "docker-test"
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.