gpt4 book ai didi

docker - 使用 docker build 和 tmpfs 构建 Docker 镜像?

转载 作者:行者123 更新时间:2023-12-02 21:11:00 24 4
gpt4 key购买 nike

问题:如何在 Dockerfile 或 docker build 上指定命令行,您是否希望在构建容器中安装 tmpfs?这是在拆分构建的上下文中 - 第一个容器将使用 RAM 磁盘,从源构建应用程序,第二阶段将结果复制到新容器中。

This question看起来很相似,但我的动机不同。我不太关心持续存在的陈旧图像层,但我关心构建的性能。在 Docker 之外进行试验时,当整个源代码树在 RAM 中而不是在磁盘上时,构建我正在使用的特定应用程序的速度要快 4 倍以上。 (该项目有许多中间构建和并行性,所以即使是 SSD 也会有一些颠簸)

由于 Docker 确实支持在正常情况下挂载 tmpfs docker run命令,似乎应该有一种方法可以将它包含在 Dockerfile 中?但是,我似乎无法在任何地方找到此信息 - 几乎所有对“tmpfs”和“dockerfile”或“build”或“ramdisk”等的搜索都指向上面链接的帖子或 Docker 中使用 tmpfs 的文档容器以 docker run 开头.

如果 tmpfs 甚至不会持续到第二个容器的程序集,那也是可以接受的。这可以通过在该容器退出之前从构建容器内的 tmpfs 中复制构建的应用程序,然后在复制时使用该新位置来简单地解决。

最佳答案

BuildKit ,您可以使用实验性功能为单个 RUN 挂载 tmpfs 文件系统线。该文件系统将不存在于该 RUN 的上下文之外。行,就像容器被停止或删除时 tmpfs 不存在一样,因此您需要在构建结束时将任何工件复制回容器文件系统。

对于 BuildKit,您至少需要 18.09,您可以通过以下任一方式启用它:

export DOCKER_BUILDKIT=1

对于单个 shell,或者要更改主机上的默认值,您可以使用以下内容更新/etc/docker/daemon.json:
{
"features": {"buildkit": true}
}

启用 BuildKit 后,Dockerfile 将如下所示:
# syntax=docker/dockerfile:experimental
FROM your_base_image
COPY src /src
RUN --mount=type=tmpfs,target=/build \
cp -r /src/. /build/ \
&& cd /build \
&& make your_project \
&& cp /build/result.bin /result.bin
...

请注意,BuildKit 是相当新的,在大多数云构建环境中不受支持,并且 docker-compose 也不支持。要查看有关这些实验性功能的更多信息,请参阅: https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md

关于docker - 使用 docker build 和 tmpfs 构建 Docker 镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54638475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com