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

忘机山人

发布于293天前
博客图片修整中,看不了可以先搜索公众号“忘机山人”看。
# 不用 SSH,如何在本地管理微服的 Docker 容器?

平时管理远端的 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](https://raw.githubusercontent.com/cloudsmithy/picgo-imh/master/image-20250814200633245.png)



###  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 exec` 或 `lzc-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](https://raw.githubusercontent.com/cloudsmithy/picgo-imh/master/image-20250814195406282.png)

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



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

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

![3398ac4853bb5a0a3be0a5a38d84e1b3](https://raw.githubusercontent.com/cloudsmithy/picgo-imh/master/3398ac4853bb5a0a3be0a5a38d84e1b3.png)

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

![image-20250814195227594](https://raw.githubusercontent.com/cloudsmithy/picgo-imh/master/image-20250814195227594.png)



###  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 的“丝滑”管理方式。下次维护微服时,你也可以试试这一套。

评论

0

暂无评论

说点什么呢~
收藏
0
0
0