使用 ramdisk 更快地构建 Dockerfile

Faster Dockerfile build using ramdisk

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

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

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

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

我曾尝试使用挂载(如下),但权限被拒绝:

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

buildkit 的实验性前端允许 tmpfs mounts during a run step

您的 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)。