如何使用 DevContainers 管理许多依赖关系

问题描述 投票:0回答:1

我目前正在构建一个基于 VS Code DevContainers 的开发环境。为了构建软件的所有配置,我需要大约 50GB 的工具依赖项。这本身并不是问题,因为使用 Docker 启动大型镜像的开销非常小。然而,我们的软件的不同版本需要不同的依赖项,导致许多大图像快速占用所有磁盘空间。

我怎样才能有效地将依赖项分发给所有开发人员?就我而言,大多数开发人员对管理依赖项缺乏经验或兴趣。理想情况下,依赖关系由某种工具自动管理。

操作系统是Linux(WSL2)。我们的构建系统目前只是一个大型 Python 项目(100k+ LOC),它根据参数构建所有内容。编译器和其他工具都是通过环境变量定义的。

我最初的想法是创建一个可以运行Python构建环境的小型DevContainer。然后我在工具的所有系统调用前面添加了

docker exec ... container sh -c '<original call>'
。在运行任何命令之前,我会拉取映像并使用相应的工具运行容器。即使在我们的 CI/CD 环境中,这种方法的效果也出奇的好,只需对我们的大型代码库进行很少的修改。然而,它很慢。构建时间翻倍,从 4 分钟增加到 8 分钟。

Build System Architecture

docker build dependency-management vscode-devcontainer
1个回答
0
投票

选项 1 - 安装座

VScode DevContainers 可以有 mounts,因此可以将本地文件夹从主机链接到 DevContainer。因此,您的主机系统上就有 50GB 的依赖项。

devcontainer.json
示例

...

  "mounts": [
    "source=MyDependencies,target=/{{My folder for the dependencies inside the devContainer}},type=volume"
  ]

...

选项 2 - 拆分 devcontainer.json 和 Dockerfile

创建

.devcontainer/devcontainer.json
.devcontainer/Dockerfile

在 devcontaoner.json 添加

...

{ 
  "build": {
    "dockerfile": "Dockerfile",
    "args": { }
  }
}

...

在 Dockerfile 中定义您自己的基础映像

FROM
您可以在 DevContainer 基础映像上使用 https://containers.dev/implementors/reference/#labels 或创建自定义 Docker 映像。

© www.soinside.com 2019 - 2024. All rights reserved.