Skip to content

懒猫微服进阶心得(十二):不登陆机器,如何使用 Docker Context 玩转微服容器?

平时管理远端的 Docker 容器,大多数人第一反应是通过 SSH 登录到服务器再执行命令。

其实 Docker 本身是 C/S 架构,只要配置好连接方式,就能在本地直接管理远程容器,甚至用 VS Code 图形化界面操作,完全不必反复登录。

下面我就用管理微服容器的例子,把实现方法和使用体验记录下来

1. 准备免密登录

为了避免奇怪的认证问题,可以先将 SSH Key 复制到远端,实现免密登录。 (/root 目录重启不会丢失 SSH Key)

bash
ssh-copy-id root@name.heiyu.space

2. 最简单的方式:设置 DOCKER_HOST

直接在本地设置 Docker 引擎的环境变量,指向远端的 docker.sock 文件:

bash
export DOCKER_HOST=ssh://root@name.heiyu.space

在 Warp 中(非直接 SSH 登录),执行 docker ps 后,就可以看到远端的容器了。

不过仔细看,这里其实是系统组件,没有必要随便动,而且千万不要随便操作系统组件容器

image-20250814200633245

3. 使用 Docker Context 管理非标准路径的 docker.sock

之前介绍过,playground 和 appstore 的 Docker 配置文件在其他目录。 这种情况下可以通过 docker context 引用非标准路径的 docker.sock:

bash
docker context create my-remote-sock \
  --docker "host=ssh://root@name.heiyu.space:/data/playground/docker.sock"

docker context use my-remote-sock

playground 的 Docker 也可以用 Dockge 管理,不过当 Dockge 的功能不够用时,就可以用这个作为备用方案。

4. 管理商店容器

商店有时需要执行 lzc-docker execlzc-docker restart,可以先创建对应的 Context:

bash
docker context create lzc-remote-sock \
  --docker "host=ssh://root@name.heiyu.space:/lzcsys/run/lzc-docker/docker.sock"

然后切换 Docker 引擎:

bash
docker context use lzc-remote-sock

查看 Docker 信息:

 Kernel Version: 6.5.0-0.deb12.4-amd64
 Operating System: Debian GNU/Linux 12 (bookworm) (containerized)
 OSType: linux
 Architecture: x86_64
 CPUs: 8
 Total Memory: 31.12GiB
 Name: lzcbox-029c588e
 ID: 0726989e-2e3e-46d1-89ba-753f7dd1a600
 Docker Root Dir: /lzcsys/run/data/system/docker

5. 本地 Warp 记录

image-20250814195406282

到这里,你会发现本地和远端几乎没有区别

6. 图形化管理:VS Code Docker 插件

在 VS Code 中安装 Microsoft 官方 Docker 插件,即可在界面中查看远端的 Image、Container、Logs,并且可以直接 exec 进入容器。

3398ac4853bb5a0a3be0a5a38d84e1b3

Docker Context 面板可以直接切换上下文(相当于 docker context use lzc-remote-sock),然后就能在 VS Code 中操作对应容器和镜像,无需手动敲命令。

image-20250814195227594

7. 查看已创建的 Docker Context

在命令行查看所有 Context:

bash
docker context ls

输出示例:

NAME              DESCRIPTION                               DOCKER ENDPOINT
default *         Current DOCKER_HOST based configuration   ssh://root@name.heiyu.space
lzc-remote-sock                                             ssh://root@name.heiyu.space:/lzcsys/run/lzc-docker/docker.sock
my-remote-sock                                              ssh://root@name.heiyu.space:/data/playground/docker.sock
orbstack          OrbStack                                  unix:///Users/.orbstack/run/docker.sock

Warning: DOCKER_HOST environment variable overrides the active context.
To use a context, either set the global --context flag, or unset DOCKER_HOST environment variable.

总结

通过 docker context 配合 VS Code Docker 插件,不仅能用命令行直接操作远端微服容器,还能图形化查看容器状态、镜像和日志。 这种方式的好处是:

  • 免 SSH 登录,管理更高效;
  • 可切换多个 docker.sock,适合同时维护多个服务环境;
  • 配合 VS Code,操作体验接近本地容器。

对于习惯 GUI 操作的人来说,这几乎就是远程 Docker 的“丝滑”管理方式。下次维护微服时,你也可以试试这一套。

❤️喜欢