Docker 上下文

介绍

本指南介绍如何使用上下文从单个客户端管理 Docker 守护程序。

每个上下文都包含管理守护程序上的资源所需的所有信息。 这docker context命令可以轻松配置这些上下文并在它们之间切换。

例如,单个 Docker 客户端可能配置了两个上下文:

  • 在本地运行的默认上下文
  • 远程共享环境

配置这些上下文后, 您可以使用docker context use <context-name>命令 在它们之间切换。

先决条件

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

  • 支持顶级context命令

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.sockUnix 套接字。

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"

新上下文存储在meta.json文件~/.docker/contexts/. 您创建的每个新上下文都有自己的meta.json存储在~/.docker/contexts/.

您可以使用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在上下文之间切换。

以下命令将切换dockerCLI 使用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-testcontext 现在是 活动上下文。

您还可以使用全局--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

使用 import this file on another host usingdocker context import创建具有相同配置的 context。

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