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"