gpt4 book ai didi

Docker:构建完成后如何使用多阶段镜像

转载 作者:行者123 更新时间:2023-12-04 05:27:40 25 4
gpt4 key购买 nike

设想

  • 多阶段构建将多个 Dockerfile 部分合并为一个
  • 中间和最后阶段可以从上层阶段复制文件
  • 建议最后阶段只包含所需的二进制文件。

  • 考虑到这些,我想建立以下
    FROM fat-base as build
    RUN setup unit test frameworks
    RUN setup integration test frameworks
    RUN setup functional test frameworks
    RUN setup all heavy lifting stuff
    CMD test

    FROM slim-base
    COPY --from=build /runtime/binary /bin/binary
    ENTRYPOINT /bin/binary

    基础阶段的再利用
  • 我不想在中间阶段运行测试,而是想在图像外运行它们,以便我可以重新排序测试序列并在管道层(Jenkins CI、Travis 等)添加更多开关
  • 我希望能够使用构建的基本图像。
  • 根据测试阶段的建议,辅助 Dockerfile.test可用于。但是,我想维护一个包含所有阶段的 Dockerfile。

  • 这是运行的要求
    docker build -t my-binary .
    docker run -ti my-binary[0] unit
    docker run -ti my-binary[0] integration --all
    docker run -ti my-binary[0] functional --only-label=container


  • 这是目前支持的吗?
  • 有解决方法吗?
  • 最佳答案

    this page of the doc 中所述,您可以使用 --target docker build 的选项创建对应于构建中间阶段的图像。

    使用您的 Dockerfile ,这相当于以下命令:

    docker build --target build -t my-binary-test .
    docker build -t my-binary .
    docker run -ti my-binary-test # run "test" as specified by "CMD test"
    docker run -ti my-binary-test test unit
    docker run -ti my-binary-test test integration --all
    docker run -ti my-binary-test test functional --only-label=container

    请注意,我添加了 test上面最后三个命令中的程序名是因为最后一条指令 CMD test您的 build stage 实际上会被命令行中给出的所有参数覆盖。更深入地了解 CMD 的语义和 ENTRYPOINT指令,我建议阅读 that section of the Dockerfile reference .

    此外,您可能想使用 --rm docker run 的选项以便在创建的容器退出时自动删除它们。

    关于Docker:构建完成后如何使用多阶段镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49844055/

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