我正在努力将我当前的 dockerfiles 转换为多阶段构建以减少一些麻烦。我从一个基本映像开始,通过 yum 安装一堆东西以及我从源代码安装的一堆其他包。
在这一点上,我想从一个新的镜像开始,只引入通过 yum 安装的包和我从源安装的二进制文件。我看到了三种方法来做到这一点,但我不喜欢第一个选项,也不知道如何做另外两个。
为 yum 安装构建一个单独的 Dockerfile,然后在从源安装之前将其用作我的基本映像。
我不喜欢这个选项,因为它增加了我的构建工作流程。将所有内容都包含在一个 Dockerfile 中会很好。不过,也许这就是我需要走的路。
通过 yum 在不同目录中安装软件包并复制到构建的下一阶段。
我发现我可以通过 将软件包安装在非默认目录中yum install --installroot=/foo --releasever=/ packagename,但是,这会将所有要求安装到 /foo 而不是继续使用安装在 /usr 中的软件包,从而导致映像显着增长。
有没有办法通过 yum 在不同的目录中安装软件包,但它是否继续从默认目录解析其依赖项?
通过 yum 安装包,然后从安装 yum 包后开始下一个构建阶段。
有没有办法将构建阶段产生的层用作下一个构建阶段的开始?像这样的东西:
FROM centos7 as first
RUN some stuff
FROM first as second
RUN some stuff
FROM second
COPY --from=second ...
Run Code Online (Sandbox Code Playgroud)
小智 0
我不确定这是否可以通过 Docker 实现,但它看起来是http://drone.io/的一个很好的用例 。您可以在构建的不同阶段使用不同的图像,然后在最终的 docker 上仅使用您想要的文件图像。
| 归档时间: |
|
| 查看次数: |
583 次 |
| 最近记录: |