Docker 內容

簡介

本指南說明如何使用 Context 從單一客戶端管理 Docker Daemon。

每個 Context 都包含在 Daemon 上管理資源所需的所有資訊。docker context 命令可以輕鬆地設定這些 Context 並在它們之間切換。

例如,單個 Docker 客戶端可以設定兩個 Context

  • 在本機執行的預設 Context
  • 遠端、共用的 Context

設定好這些 Context 後,您可以使用 docker context use <context-name> 命令在它們之間切換。

先決條件

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

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

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

Context 的剖析

Context 是多個屬性的組合。這些屬性包括

  • 名稱和描述
  • 端點設定
  • 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 通訊。

「名稱」欄位中的星號表示這是作用中的 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 命令建立新的 Context。

以下範例建立一個名為 docker-test 的新 Context,並將 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 在 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 旗標來覆蓋 Context。以下命令使用名為 production 的 Context。

$ docker --context production container ls

匯出和匯入 Docker Context

您可以使用 docker context exportdocker 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"