gpt4 book ai didi

docker - 将 docker 与许多交叉构建工具链一起使用

转载 作者:行者123 更新时间:2023-12-02 19:14:36 25 4
gpt4 key购买 nike

在我的团队中,我们目前使用单个 docker 镜像来交叉构建一个 SW 库,我们在一个 docker 镜像 (/opt/...) 中添加多个交叉构建工具链。 Dockerfile 和工具链都在一个 git 存储库中(通过 git-lfs 的工具链存档)。
Dockerfile 便于对构建环境进行全面的形式化描述,可以在不同的机器上使用。
现在我们不断从客户那里获得工具链,有时还会获得这些工具链的新版本。
因此,我们的 docker 镜像增长很快,目前使用了大约 40GB。更糟糕的是,如果我们需要添加/修改/删除一个工具链,构建一个新的 docker 镜像所花费的时间。
所以我开始怀疑我们是否以“良好实践”的方式做事。
为每个工具链使用单独的 docker 镜像可以节省每次构建巨大的单个 docker 镜像的时间。但在空间方面更糟(因为每个 docker 镜像都包含带有构建工具等的 Linux 子系统)。
我会很高兴任何提示如何以更好的方式做到这一点。

  • 有没有“既定”的方法来处理这种情况?
  • 其他团队如何处理这个用例?
  • 最佳答案

    图层

    Using a separate docker image for each toolchain would save time for building the huge single docker image each time. But it's even worse when it comes to space (because each docker image would contain the Linux subsystem with build tools etc).


    这主要是不正确的,因为一个名为 layers 的 Docker 功能。 .
    什么是图层?每次您在 Dockerfile 中有一个命令时,都会创建一个新层,其中包含自上一层创建以来更改的文件。一旦创建,层是不可变的。
    这给你买了两件事。
  • 它带给您的第一件事是您可以拥有“构建缓存”。如果您更改 Dockerfile 中的最后一条命令,并重新运行整个内容,则只需重新运行最后一条命令。其他所有内容都将从缓存中获取。
  • 它完成的第二件事是,如果多个 docker 镜像具有相同的层,它们可以在磁盘上共享这些层。第一次使用基于 Ubuntu 的镜像时,需要花费几 GB。第二次,它不会花任何钱。

  • 构建自定义基础镜像
    之前,我说这“大部分”不是真的。有什么警告?
    有一种方法可以减小许多不同图像的大小。如果您可以识别其中许多人使用的常见依赖项,则可以节省空间将该依赖项提取到“基础镜像”中。
    假设您有两个 Docker 镜像,由以下 Dockerfile 定义:
    # Image A
    FROM ubuntu:latest
    RUN apt-get install -y foo
    RUN apt-get install -y gcc
    # Image B
    FROM ubuntu:latest
    RUN apt-get install -y bar
    RUN apt-get install -y gcc
    这里我们有两个镜像,它们都安装了 gcc。但是,gcc 的两次安装将创建两个层,因为 Docker 无法判断它们是相同的。这是浪费空间。
    您可以做的是创建一个定义基本镜像的 Dockerfile:
    # Base image
    FROM ubuntu:latest
    RUN apt-get install -y gcc
    然后,您运行 docker build -t my-cool-base-image .现在,您可以像这样引用基础镜像:
    # Image A
    FROM my-cool-base-image:latest
    RUN apt-get install -y foo
    # No need to install gcc here
    现在您的两个容器将在磁盘上共享一个 gcc 副本。

    关于docker - 将 docker 与许多交叉构建工具链一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64137681/

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