假设我想将最新版本的AwesomeTool集成到一个docker容器(比如运行CentOS)中,任何repo中都没有RPM可用(或者rpm不是最新的,我想运行最新版本)。
所以我下载了awesometool.tar.gz,解压缩,配置&& make&& make install。然后我意识到它已经在所有不同的位置安装了东西,库,二进制文件,符号链接......我需要在“docker build”期间将所有这些东西都放到我的Docker镜像中。
我应该:
1)在docker图像构建期间进行构建,预先安装所有必需的工具(gcc,make等),也许在安装后将其删除。
2)在图像外部构建软件,然后找到一种方法将所有安装工件复制或打包到图像中(基本上你在制作RPM时会做什么)。
使(2)更容易的一种方法是在docker构建期间安装到PREFIX并将其复制到映像中,但是需要将其复制到匹配的位置,否则共享对象可能无法正确链接。
(1)的一个优点是构建被封装在Dockerfile中,但可能会留下所有这些构建工件,除非进行了非常具体的清理。
(2)的一个优点是docker图像更清晰,但需要外部构建步骤,并且可能需要处理所有需要复制的工件的棘手工作....当新版本的AwesomeTool发布时,这可能会改变因此需要保持。
其他人如何解决这个问题?
答案 0 :(得分:0)
我会选择选项(1)。可以删除构建工件。这里的重要问题是这些工件的安装,编译和删除都是在单个RUN中完成的,以使图像更小。
选项(3)将创建一个RPM规范来构建包并指定其运行时依赖关系,然后创建RPM并使用yum安装它。