Docker 上下文
介绍
本指南展示了如何使用上下文从单个客户端管理Docker守护进程。
每个上下文包含管理守护进程上资源所需的所有信息。
docker context 命令使得配置这些上下文并在它们之间切换变得容易。
例如,一个单一的Docker客户端可能配置有两个上下文:
- 本地运行的默认上下文
- 远程共享上下文
一旦这些上下文配置完成,
你可以使用docker context use 命令
在它们之间进行切换。
先决条件
要遵循本指南中的示例,您需要:
- 支持顶级
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_HOST 和 DOCKER_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 ls和docker context inspect 查看新的上下文。
$ 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 export和docker 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 。
更新上下文
你可以使用docker context update来更新现有上下文中的字段。
以下示例更新了现有docker-test上下文中的描述字段。
$ docker context update docker-test --description "Test context"
docker-test
Successfully updated context "docker-test"