Docker Context 通过抽象连接配置实现公有云与私有云多实例统一管理,支持 SSH/TLS/TCP 方式创建独立上下文,切换后命令自动作用于目标环境,不干扰本地镜像缓存,且导出时不包含密钥仅保留路径引用。

用 Docker Context 管理公有云和私有云中的多个 Docker 实例,核心是把每个环境的连接方式抽象成独立、可切换的上下文,而不是靠改 DOCKER_HOST、硬编码 TLS 路径或在 compose 文件里写死地址。它不碰镜像缓存、不改本地数据,只管“连哪儿”,轻量又安全。
区分访问方式,按需创建 context
公有云(如阿里云 ECS、腾讯云 CVM)通常支持 SSH 或 TLS 连接;私有云(如自建 Harbor 集群、内网 K8s 节点上的 dockerd)则可能走 SSH、TLS,甚至内网直连 TCP(仅限可信环境):
-
SSH 方式(推荐用于公有云主机):免证书管理,自动复用本地 SSH key
docker context create aliyun-prod --docker "host=ssh://root@47.98.x.x" -
TLS 方式(适用于生产级私有云或启用了 TLS 的公有云节点):需提前将 ca.pem/cert.pem/key.pem 放到本地路径
docker context create harbor-staging --docker "host=tcp://10.10.5.200:2376,ca=/certs/harbor-ca.pem,cert=/certs/harbor-cert.pem,key=/certs/harbor-key.pem" -
普通 TCP(仅限内网私有云调试环境):远程 daemon 必须已配置监听
tcp://0.0.0.0:2375,且客户端与服务端网络互通docker context create lab-internal --docker "host=tcp://192.168.10.10:2375"
统一使用,避免误操作关键环境
激活某个 context 后,所有 docker 和 docker compose 命令默认作用于对应实例,无需加参数:
- 切换到阿里云生产环境:
docker context use aliyun-prod→ 接着运行docker ps就看到云上容器 - 临时执行某条命令而不改变当前 context:
DOCKER_CONTEXT=harbor-staging docker compose ls - CI/CD 中防止误部署:
DOCKER_CONTEXT=prod docker compose up -d显式指定目标,不依赖当前激活项
团队协作:导出 context,不传密钥
context 本身不包含 SSH 私钥或 TLS 密钥文件内容,只记录路径引用。适合打包分发:
- 导出配置(不含敏感文件):
docker context export aliyun-prod > aliyun-prod.context.tar - 新成员导入前,先将自己的 SSH key 放到
~/.ssh/id_rsa(或按原路径准备证书),再运行:docker context import aliyun-prod-new aliyun-prod.context.tar - 建议配合初始化脚本(如 Bash 或 Ansible)自动同步密钥路径并创建 context,避免手动遗漏
搭配私有仓库时的注意事项
Context 管理的是 daemon 连接,不影响镜像拉取逻辑。但若私有仓库需跳过 TLS 校验(如自签证书的内网 registry),仍需在对应主机的 /etc/docker/daemon.json 中配置 insecure-registries,并重启 dockerd —— 这一步在远程主机侧完成,与本地 context 无关。











