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
这显示了一个名为“默认”的上下文。它被配置为通过本地/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
命令创建新的上下文。
以下示例创建一个名为 TCP socket 的新上下文docker-test
,并将该上下文的主机端点指定为 TCP socket 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 ls
您可以使用和查看新上下文docker 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 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 <context-name> <context-file>
.
更新上下文
您可以用来docker context update
更新现有上下文中的字段。
以下示例更新现有docker-test
上下文中的描述字段。
$ docker context update docker-test --description "Test context"
docker-test
Successfully updated context "docker-test"