在VS Code的Remote Container中启动多个容器来切换工作

首先

VSCode 的远程容器非常方便。
它能够让我们尝试各种编程语言而不污染本地PC环境,真是太棒了。

只是想快速尝试一下,却总是觉得逐个设置不同的语言太麻烦了,是吧?

在这个帖子中,我们介绍了一种只需要启动一次就可以连接多个容器的设置。

如需详细了解,请参考公式文档中的以下链接:
https://code.visualstudio.com/docs/remote/containers-advanced#_connecting-to-multiple-containers-at-once

演示代码的简介

这里我们将处理 golang 和 python 的容器。
.
├── golang
│ ├── .devcontainer.json
│ └── Dockerfile
├── python
│ ├── .devcontainer.json
│ └── Dockerfile
└── docker-compose.yml

设定文件的详细信息。

1. Docker-compose.yml 文件

将使用 remote-container 进行管理的代码的根路径写入 docker-compose.yml。

如果在build.context中指定目录,并在dockerfile中写入到Dockerfile的相对路径,那就没有问题了。

如果你不喜欢目录结构,你也可以自由地进行更改。

version: "3"
services:
  golang-container:
    build:
      context: golang 
      dockerfile: Dockerfile
    volumes:
      - .:/workspace:cached
    environment:
      TZ: "Asia/Tokyo"
    command: sleep infinity

  python-container:
    build:
      context: python 
      dockerfile: Dockerfile
    volumes:
      - .:/workspace:cached
    environment:
      TZ: "Asia/Tokyo"
    command: sleep infinity

2. .devcontainer.json

2. .devcontainer.json 文件

将每个容器的设置记录在.devcontainer.json文件中。

为了建立亲子关系,我们将 dockerComposeFile 和 service 的名称与 docker-compose.yml 文件中定义的名称保持一致。

通过为每种语言分配一个特定的文件夹路径来指定 workspaceFolder,可以在 VS Code 窗口上避免显示其他语言。(如果显示其他语言,可能会弹出警告信息,比较烦人)

由于有各种不同的扩展功能可供选择,您可以自由地进行定制。

{
    "name": "Dev Container Golang Env",
    "dockerComposeFile": "../docker-compose.yml",
    "service": "golang-container",
    "workspaceFolder": "/workspace/golang",
    "extensions": [
      "golang.go",
      "donjayamanne.githistory",
      "eamodio.gitlens",
      "codezombiech.gitignore",
      "mhutchie.git-graph",
      "esbenp.prettier-vscode",
      "coenraads.bracket-pair-colorizer",
      "ionutvmi.path-autocomplete"
    ],
    "terminal.integrated.shellArgs.linux": [
        "-l"
    ],
    "shutdownAction": "stopCompose"
}

3. Dockerfile – Docker文件

我会针对每个容器写下想要使用的设置。

由于与普通的Dockerfile相同,因此在安装库时也会很方便。

在这里,我们正在安装大家都喜欢的Git的自动补全工具。

FROM golang:buster

WORKDIR /

RUN apt-get update \
 && apt-get install -y --no-install-recommends \
      git \
      openssh-client \
      procps \
      ca-certificates \
      curl \
      unzip \
      gnupg \
      vim \
      wget \
 && rm -rf /var/lib/apt/lists/*

# git
RUN wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -O ~/.git-completion.bash
RUN chmod a+x ~/.git-completion.bash
RUN echo "source ~/.git-completion.bash" >> ~/.bashrc
RUN wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -O ~/.git-prompt.sh
RUN chmod a+x ~/.git-prompt.sh
RUN echo "source ~/.git-prompt.sh" >> ~/.bashrc

启动多个容器的方法

    1. 打开VS Code的命令面板,选择Remote-Containers: Open Folder in Container…

 

    选择您想要打开的目录(此次是golang或python的目录)

按照常规启动RemoteContainer的步骤操作,不仅可以创建所选择的容器,还会创建配置中所记载的其他容器。

只需要按照1. 2. 的步骤,选择要打开的目录,就可以切换了。由于容器在第一次启动时就已经启动,所以窗口可以立即切换并进行操作。

如果您想在另一个窗口中进行操作,可以在 VS Code 中创建一个新窗口,然后按照以下步骤进行操作: 1. 2.

总结

我介绍了在VS Code的Remote Container中启动多个容器的方法。
在这里我们示范了使用golang和python两个容器,但您可以自由添加其他容器。

在使用git的私有仓库中管理多种语言可能会很有用。
似乎也可以用于测试不同版本的语言的运行情况。

源代码已在 GitHub 上公开。
https://github.com/fumiyakk/demo-multiple-remote-containers

Python 是为了使用 poetry 而精心设计的。
我将介绍关于将 poetry 和 black 结合起来使用的 Python 开发环境。

bannerAds