我应该在Docker镜像中编译我的应用程序

时间:2017-01-17 03:45:42

标签: docker compilation vagrant

虽然我大部分时间都在开发Java应用程序并且只使用Maven,所以我的构建应该是可重现的(至少Maven说的是这样)。

但是你说你正在编译一个C ++程序或者更多涉及的东西,你应该在docker里面构建吗? 或者理想情况下使用流浪者或其他技术来制作可复制的构建。

如何使用docker管理可重现的构建?

2 个答案:

答案 0 :(得分:6)

你可以,但不是在你的最终图像中,因为这意味着一个比必要更大的图像:它将包括所有的编译工具,而不是仅限于你需要执行结果二进制。

您可以在" How do I build a Docker image for a Ruby project without build tools?"

中看到替代方案
  • 我使用图片构建,
  • 我将生成的已停止的容器提交为新图像(包含生成的二进制文件的卷)
  • 我使用执行图像(只包含您需要运行的图像),并从另一图像复制二进制文件。我再次提交了生成的容器。

最终图像包括已编译的二进制文件和执行环境。

答案 1 :(得分:1)

我想发布一个答案,因为要建立在VonC的答案上。实际上我刚刚接受了Redhat Openshift培训,他们使用了一个名为Source to Image s2i的工具,它使用docker来创建docker图像。实际上,这种策略非常适合管理私有(或公共)云,其中您的构建可能在不同的机器上编译,但您需要保持构建环境的一致性。