gpt4 book ai didi

Docker-compose 级联构建镜像

转载 作者:行者123 更新时间:2023-12-02 19:21:03 29 4
gpt4 key购买 nike

我想构建一组图像,一个依赖于另一个。
例如,我想创建包含源代码和 SDK 的镜像 A,执行构建。
然后,我想创建图像 B,其中包含运行时和从机器 A 检索的一些二进制文件,以运行 Web 应用程序的用户前端。
最后,我想创建镜像 C,其中包含运行时和一些从机器 A 检索(再次)的二进制文件,以运行 Web 应用程序的管理命令。

总结一下,这就是我想做的事情:

  • 创建机器A;将源文件从主机复制到机器 A,执行构建
  • 创建机器B;将文件(二进制文件)从机器 A 复制到机器 B
  • 创建机器C;将文件(二进制文件)从机器 A 复制到机器 C
  • 扔掉机器A
  • 运行B机
  • 运行机器C

  • 在这种情况下,我应该能够从 dockerfile 创建机器 A 并为其命名和标记;接下来我需要从其他 dockerfile 中引用它。

    我试图在 docker-compose 文件中指定图像名称和标签:
    图片:myRepo/imageA:Images.A

    只是,我无法从 dockerfiles B 和 C 中检索它。我是否有必要构建一个 repo 机器并将机器 A 存储在上面?是不是可以避免这一步?

    最佳答案

    你描述的布局是合理的,但不能直接表达到Docker Compose。 (它无法表达未附加到正在运行的容器的图像或表达不同图像构建之间的依赖关系。)您必须在需要时手动重建基础图像

    docker build -f Dockerfile.sdk -t image-a .

    您的其他 Dockerfile 可以从
    FROM image-a

    没有特别需要将此镜像推送到存储库,只要您已正确构建和标记该镜像并且它存在于本地,您就可以启动另一个 Dockerfile FROM图片。

    然后你可以 docker-compose up --build像平常一样。

    您可以“教”Docker Compose 这方面的知识,但只能通过添加一个您不希望实际运行的附加服务。

    services:
    a:
    build:
    context: .
    dockerfile: Dockerfile.sdk
    image: image-a
    command: /bin/true # exit immediately

    docker-compose build documentation没有说明内置容器的顺序(或者即使保证它们是连续构建的),所以你需要再次手动构建它
    docker-compose build a
    docker-compose up --build

    是否需要单独的“应用程序”和“工具”图像也值得考虑。我的直觉是,在大多数图像中,基本图像和语言运行时的大小远远大于应用程序的大小,尤其是应用程序的单个入口点。如果带有几个额外小工具命令的单个图像满足您的需求,那么您所描述的是 multi-stage build 的非常典型的用法。 .要运行工具命令,您可以 docker-compose run您的 docker-compose.yml 中声明的服务之一带有备用命令的文件,或 specify both a build: and a target image: name in docker-compose.yml docker run生成的图像。

    关于Docker-compose 级联构建镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59714123/

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