0

假设我想将最新版本的 AwesomeTool 集成到 docker 容器中(比如运行 CentOS),任何 repo 中都没有可用的 RPM(或者 rpm 不是最新的,我想运行最新版本)。

于是我下载了awesometool.tar.gz,解压,配置&&make&&make install。然后我意识到它已经在所有不同的位置、库、二进制文件、符号链接中安装了东西……我需要在“docker build”期间将所有这些东西放入我的 Docker 映像中。

我应该:
1) 在 docker 映像构建期间进行构建,预先安装所有必要的工具(gcc、make 等),也许在安装后将它们删除。
2)在镜像之外构建软件,然后找到一种方法将所有安装工件复制或打包到镜像中(基本上你在制作 RPM 时会做的)。

使(2)更容易的一种方法是安装到 PREFIX 中并在 docker build 期间将其复制到映像中,但它需要复制到匹配的位置,否则共享对象可能无法正确链接。

(1) 的一个优点是构建被封装在 Dockerfile 中,但可能会留下所有这些构建工件,除非进行了非常具体的清理。

(2) 的一个优点是 docker 映像更干净,但需要外部构建步骤,并且可能需要一些棘手的工作来跟踪所有需要复制的工件......当新版本 AwesomeTool 发布时可能会发生变化,因此需要要维护。

其他人如何解决这个问题?

4

1 回答 1

0

我会选择选项(1)。可以删除构建工件。这里的重要问题是这些工件的安装、编译和删除在一次 RUN 中完成,以使映像更小。

选项 (3) 是创建一个 RPM 规范来构建包并指定其运行时依赖项,然后创建 RPM 并使用 yum 安装它。

于 2017-05-18T03:48:26.870 回答