当多个开发者使用不同的开发环境在同一个项目上工作时,编码和测试的不一致性是一个风险。Visual Studio Code (VS Code) 是一个集成开发环境 (IDE),可以帮助最大限度地减少这些问题。它可以与容器结合使用,为每个应用程序提供独立的开发环境,并提供一致的开发环境。
VS Code 的 Remote - Containers 扩展 使您能够定义容器,使用该定义构建容器,并在容器内进行开发。此容器定义可以与应用程序代码一起检入源代码仓库,这允许所有开发者使用相同的定义来构建和在容器内进行开发。
默认情况下,Remote - Containers 扩展使用 Docker 来构建和运行容器,但很容易使用 Podman 作为容器运行时,并且可以使用 无根容器。
本文将引导您完成设置,以便使用 VS Code 和 Remote - Containers 扩展在无根容器内进行开发。
初始配置
在继续之前,请确保您的 Red Hat Enterprise Linux (RHEL) 或 Fedora 工作站已更新到最新的勘误表,并且已安装 VS Code 和 Remote - Containers 扩展。(有关安装的更多信息,请参阅 VS Code 网站。)
接下来,使用简单的 dnf install
命令安装 Podman 及其支持包
$ sudo dnf install -y podman
安装 Podman 后,配置 VS Code 以使用 Podman 可执行文件(而不是 Docker)与容器进行交互。在 VS Code 中,导航到 文件 > 首选项 > 设置,然后单击 扩展 旁边的 > 图标。在出现的下拉菜单中,选择 Remote - Containers,然后向下滚动以找到 Remote > Containers: Docker 路径 选项。在文本框中,将 docker 替换为 podman。

(Brant Evans,CC BY-SA 4.0)
现在配置已完成,在 VS Code 中为项目创建并打开一个新文件夹或现有文件夹。
定义容器
本教程使用创建 Python 3 开发容器的示例。
Remote - Containers 扩展可以将必要的基本配置文件添加到项目文件夹。要添加这些文件,请通过在键盘上输入 Ctrl+Shift+P 打开命令面板,搜索 Remote-Containers: 添加开发容器配置 文件,然后选择它。

(Brant Evans,CC BY-SA 4.0)
在下一个弹出窗口中,定义要设置的开发环境类型。对于此示例配置,搜索 Python 3 定义并选择它。

(Brant Evans,CC BY-SA 4.0)
接下来,选择将在容器中使用的 Python 版本。选择 3 (默认) 选项以使用最新版本。

(Brant Evans,CC BY-SA 4.0)
Python 配置还可以安装 Node.js,但对于此示例,取消选中安装 Node.js 并单击“确定”。

(Brant Evans,CC BY-SA 4.0)
它将创建一个包含名为 devcontainer.json
和 Dockerfile
文件的 .devcontainer
文件夹。VS Code 会自动打开 devcontainer.json
文件,以便您可以自定义它。
启用无根容器
除了显而易见的安全性优势之外,以无根用户身份运行容器的另一个原因是,在项目文件夹中创建的所有文件都将由容器外部的正确用户 ID (UID) 拥有。要以无根容器身份运行开发容器,请通过将以下行添加到 devcontainer.json
文件的末尾来修改它
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,Z",
"workspaceFolder": "/workspace",
"runArgs": ["--userns=keep-id"],
"containerUser": "vscode"
这些选项告诉 VS Code 使用适当的 SELinux 上下文挂载工作区,创建一个用户命名空间,将您的 UID 和 GID 映射到容器内的相同值,并使用 vscode
作为容器内的用户名。devcontainer.json
文件应如下所示(不要忘记行尾的逗号,如所示)

(Brant Evans,CC BY-SA 4.0)
现在您已经设置了容器配置,您可以构建容器并在其中打开工作区。重新打开命令面板(使用 Ctrl+Shift+P),并搜索 Remote-Containers: 重建并重新在容器中打开。单击它,VS Code 将开始构建容器。现在是休息一下(并享用您最喜欢的饮料)的好时机,因为构建容器可能需要几分钟。

(Brant Evans,CC BY-SA 4.0)
容器构建完成后,项目将在容器内打开。在容器内创建或编辑的文件将反映在容器外部的文件系统中,并将正确的用户权限应用于文件。现在,您可以继续在容器内进行开发。VS Code 甚至可以将您的 SSH 密钥和 Git 配置带入容器,以便提交代码就像在容器外部编辑时一样工作。
后续步骤
现在您已经完成了基本设置和配置,您可以进一步增强配置的实用性。例如
- 修改 Dockerfile 以安装其他软件(例如,所需的 Python 模块)。
- 使用自定义容器镜像。例如,如果您正在进行 Ansible 开发,则可以使用 Quay.io 的 Ansible Toolset。(请务必通过 Dockerfile 将
vscode
用户添加到容器镜像。) - 将
.devcontainer
目录中的文件提交到源代码仓库,以便其他开发者可以利用容器定义进行开发工作。
在容器内开发有助于通过保持每个项目的依赖项和代码独立来防止不同项目之间的冲突。您可以使用 Podman 在无根环境中运行容器,从而提高安全性。通过结合 VS Code、Remote - Containers 扩展和 Podman,您可以轻松地为多个开发者设置一致的环境,缩短设置时间,并以安全的方式减少因开发环境差异而导致的错误。
评论已关闭。