假设我想将最新版本的 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 发布时可能会发生变化,因此需要要维护。
其他人如何解决这个问题?