在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
启动多个容器的方法
-
- 打开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 开发环境。