我们运行一个构建过程,该过程可以从大型代码库中编译多个工件。
在配备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
答案 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
)。