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_HOST
和 DOCKER_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 ls
和 docker 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 export
和 docker 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"