问:如何在Dockerfile或docker build
命令行中指定您希望在构建容器中挂载一个tmpfs?这是在拆分构建的上下文中-第一个容器将使用RAM磁盘,从源代码构建应用程序,第二个阶段将结果复制到一个新容器。
This question看起来很相似,但我的动机不同。我并不太关心陈旧的图像层的持久性,但我关心的是构建的 * 性能 *。当在Docker之外进行试验时,当整个源代码树在RAM中而不是在磁盘中时,构建我正在使用的特定应用程序的速度快了4倍以上。(该项目有许多中间构建和并行性,所以即使是SSD也会有一些颠簸)
由于Docker确实支持在正常的docker run
命令期间挂载tmpfs,因此似乎应该有一种方法将其包含在Dockerfile中。我似乎在任何地方都找不到这些信息--几乎每一个搜索“tmpfs”和“dockerfile”或“build”或“ramdisk”等的结果都指向上面链接的帖子或Docker's关于在以docker run
开头的容器中使用tmpfs的文档。
如果tmpfs甚至不能持续到第二个容器的程序集,这也是可以接受的,可以通过在构建容器退出之前将构建的应用程序从构建容器内的tmpfs中复制出来,然后在复制时使用新的位置来解决。
2条答案
按热度按时间yzuktlbb1#
使用BuildKit,您可以使用实验特性为单个
RUN
行挂载tmpfs文件系统,该文件系统不会存在于RUN
行的上下文之外,就像当容器停止或删除时tmpfs不存在一样,因此您需要在构建结束时将任何工件复制回容器文件系统。对于BuildKit,您至少需要18.09,并且可以通过以下任一方式启用它:
对于单个shell,或者要更改主机上的默认值,您可以使用以下命令更新/etc/docker/daemon. json:
启用BuildKit后,Dockerfile将如下所示:
请注意,BuildKit是相当新的,在大多数云构建环境中不受支持,在旧版本中也不受Docker-compose支持。要查看更多关于这些实验特性的信息,请参见:https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/reference.md
坞站合成:
在v1.25.0中发布了对Docker-compose中BuildKit的支持。为了启用它,请执行以下配置:
在shell中设置了这些变量之后,现在可以使用BuildKit运行
docker-compose build
。在Windows中,您可以在控制台中执行:
之后将需要重新启动您的控制台
lyr7nygr2#
在docker中,挂载点只有在你执行
docker run
时才是可配置的。docker文件中的目录不应该改变它的行为。这就是为什么挂载点只在运行中。希望能有所帮助!