使用ramdisk更快地构建Dockerfile

时间:2020-08-03 12:11:29

标签: docker docker-compose dockerfile tmpfs

我们运行一个构建过程,该过程可以从大型代码库中编译多个工件。

在配备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

1 个答案:

答案 0 :(得分:1)

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