在Docker容器中构build软件/如何pipe理?

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

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

我是不是该:
1)在Docker镜像构build过程中进行构build,预先安装所有必需的工具(gcc,make等),或者在安装后将其移除。
2)在图像之外构build软件,然后find一种方法将所有安装构件复制或打包到图像中(基本上,您在制作RPM时将执行的操作)。

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

(1)的一个优点是构build被封装在Dockerfile中,但是除非完成特定的清理,否则可能会留下所有这些构build工件。

(2)的优点是docker图像更清洁,但需要外部构build步骤,并可能需要复杂的工作来追踪所有需要复制的工件….当新版本的AwesomeTool发布时可能会改变,因此需要保持。

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

我会select选项(1)。 构build工件可以被删除。 这里最重要的问题是安装,编译和删除这些工件是在一个单一的运行,使图像变小。

选项(3)将创build一个RPM规范来构build包并指定其运行时依赖关系,然后创buildRPM并使用yum进行安装。