Docker上下文(Context)支持多环境快速切换,封装daemon连接信息且与运行时数据分离,可配合Compose和CI/CD实现安全高效的多环境管理。

Docker 客户端支持多上下文(Context)管理,让你能在不同 Docker 环境(如本地、远程服务器、Kubernetes 集群、云平台等)之间快速切换,无需反复修改 ~/.docker/config.json 或手动指定 --host 参数。
创建与切换 Context
每个 Context 封装了 Docker daemon 的连接信息(如主机地址、TLS 配置、认证凭据),并可关联一个默认的命名空间(如 Kubernetes namespace)。常用操作如下:
- 查看当前 context:
docker context ls,带星号的是当前激活项 - 切换 context:
docker context use my-remote - 创建新 context(例如连接远程 daemon):
docker context create my-remote --docker "host=ssh://user@192.168.1.100" - 创建基于 TLS 的 context:
docker context create prod --docker "host=tcp://prod.example.com:2376,ca=/path/ca.pem,cert=/path/cert.pem,key=/path/key.pem"
Context 与配置分离的设计优势
Context 不包含镜像、容器或网络等运行时数据,只保存连接配置。这意味着:
- 多个 context 可共用同一套本地镜像缓存(不影响构建和拉取)
- 执行
docker ps或docker run时,命令自动作用于当前 context 对应的 daemon - 可在 CI/CD 中通过
DOCKER_CONTEXT=staging docker compose up显式指定环境,避免误操作生产环境
配合 Docker Compose 使用 Context
Docker Compose v2.20+ 原生支持 context,无需额外配置即可继承当前 context 的连接设置:
-
docker compose ls列出当前 context 下的 stack -
docker compose up部署到当前 context 对应的后端 - 若需跨 context 运行 compose(如本地构建 + 远程部署),可用
DOCKER_CONTEXT=remote docker compose push
进阶:Context 导入导出与团队协作
Context 可导出为 tar 包,便于安全分发给团队成员(不含敏感密钥,除非显式指定):
- 导出:
docker context export my-dev > dev-context.tar - 导入:
docker context import my-dev-new dev-context.tar - 注意:SSH key、TLS cert 等文件路径仍需在目标机器上存在,建议搭配 ansible 或 shell 脚本统一初始化
Context 是轻量、声明式、可脚本化的环境抽象机制,合理使用能显著降低多环境运维复杂度。










