1

我们运行一个从大型代码库编译多个工件的构建过程。

在带有 SSD 的体面规格 i7 上,这需要大约 20 分钟,但是当我转向使用 tmpfs 时,时间会下降到大约 3 分钟。

我们正在使用 docker-compose 打包构建过程,以确保所有开发人员都获得相同的构建环境,但也希望他们能够在没有更改的情况下使用 Docker 缓存中的工件运行项目。感知的构建时间是一个问题,但我们也担心会磨损磁盘驱动器,因为每次构建时进程写入 > 1Gb。

有没有办法在 Dockerfile 'RUN' 命令(不是运行容器阶段)中挂载 tmpfs?

我曾尝试使用 mount (如下),但获得的权限被拒绝:

RUN mkdir -p /core_src && mount -t tmpfs /dev/foo /core_src
4

1 回答 1

1

buildkit 的实验性前端允许在运行步骤期间挂载 tmpfs

你的 Dockerfile 看起来像:

# syntax=docker/dockerfile:experimental
FROM your_base_image
RUN --mount=type=tmpfs,target=/core_src compile_command_here

然后要使用 compose 启用 buildkit,您可以设置两个环境变量:

export DOCKER_BUILDKIT=1 # or configure in daemon.json
export COMPOSE_DOCKER_CLI_BUILD=1

在 /etc/docker/daemon.json 中启用 buildkit 如下所示:

{ "features": { "buildkit": true } }

然后需要重新加载 dockerd 才能使用它(systemctl reload docker)。

于 2020-08-03T12:20:45.940 回答