Jason Pan

以远端的容器作为开发环境

潘忠显 / 2025-10-28


背景:前两周因为要调试一个模型服务,需要用到带显卡的开发环境,AnyDev上没有申请到GPU容器,就在组内一台有显卡的CVM上启动容器,以该容器作为开发环境。之前使用 JetBrains 的软件直接连过远程服务器,但是还没有连过服务器上容器。

最近使用 VS Code 连接远程容器作为开发环境,非常简单,稍作记录。

为了更聚焦,这里类比真实开发场景进行了简化:

VS Code 连接到远端机器、远端容器的原理如下,可以先有一个清晰的认识:

framework

1. 连接到远程服务器

这一步太简单了,相信你左侧的面板里一定有一个 「远程/SSH」 的选项卡。

不过我这里还是简单介绍一下。

VS Code 中使用 Command + Shift + P (在 macOS 上) 或 Ctrl + Shift + P (在 Windows/Linux 上) 调用出来的那个窗口叫做:命令面板 (Command Palette)

可以直接通过命令面板找到 SSH config:

ssh-config

如果你使用密码登录,可以直接这样配置:

Host 1.13.173.171
    User root
    # 强制禁用公钥认证
    PreferredAuthentications password
    PubkeyAuthentication no

保存配置文件之后就可以在左侧出现对应的远程主机,双击即可连接,输入密码即可连接。

但是,最安全、最方便、最推荐的方法是使用 SSH 密钥进行认证,而不是保存密码或重复输入密码(需要在远程主机上关联公钥),本地配置如下:

Host 1.13.173.171
    Port 22
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519

连接成功之后,便可以打开项目目录。

2. 安装 Dev Containers

需要点击左侧的插件按钮,安装 「Dev Containers」 插件才能进行使用。

dev-containers-plugin

3. 非root用户的权限设置

如果你不是使用 root 登录的远端服务器,需要将用户加入到 Docker 用户组才行,不然没有权限访问容器(本质是没有权限直接调用 docker run 等指令)。

sudo usermod -aG docker $USER

执行完上边的指令之后,需要重启 VS Code

如果是你自己的机器,直接用 root 也很方便,不需要此步骤。

4. 配置开发容器

如果你有现成的镜像,可以直接创建文件配置。如果你没有现成的容器镜像,可以通过交互式的方式找到合适的镜像,进而创建环境。

交互式配置开发容器

通过命令面板找到 「Add Dev Container Configuration Files…」:

dev-containers-config

选择一个模板,比如可以选择 Go 的:

dev-containers-go

然后进一步选择具体的版本:

dev-containers-go-version

上边步骤操作完之后,会产生一个 .devcontainer/ 目录,在下边产生一个 devcontainer.json 文件。

直接配置开发容器

从上边介绍可以看到,以上交互操作,是通过图形界面操作,最终生成一个 .devcontainer/devcontainer.json 文件。

如果你有现成的开发环境镜像,完全可以直接创建配置文件:

mkdir -p .devcontainer/
touch .devcontainer/devcontainer.json

然后编辑内容:

{
  // 使用自己的开发镜像和名称
	"name": "go1.20",
	"image": "golang:1.20"
}

5. 进入容器开发与构建

通过命令面板搜索:Dev Containers: Open Folder in Container:

dev-containers-open-folder

选择相应目录之后,便进入到了容器。

通过新创建的 Terminal 便可以直接执行指令,进行构建。

dev-containers-build

6. 其他操作

Dev Containers 面板介绍

常用的操作都可以在左侧 Remote 的面板中通过右键或者右上角的图标操作。

上方可以切换是使用 Dev Containers 还是使用普通的 SSH。

特殊指令需要通过命令面板。

dev-containers-panel

更新开发容器

如果你更新了 devcontainer.json 文件,通常右下角会提醒是否要重新构建环境,点击 Rebuild 即可构建:

dev-containers-rebuild

你也可以通过面板搜索 「Dev Containers: Rebuild Container」:

dev-containers-rebuild-from-cmd

清理开发容器

如果经常使用多个不同的容器,可以搜索 「Clean Up Dev Containers」,对不再需要的已停止的开发容器进行清理操作。

因为构建过程可能产生比较大的中间镜像层。清理一下可以释放系统资源(主要是磁盘空间),保持环境整洁。

小结

通过上述步骤,可以快速的在本地连接到远程服务器上的容器中,以此作为开发编译环境,大大提高开发效率。