在开发中的Docker容器中的卷中创建新映像或共享源代码?

时间:2019-02-20 14:46:26

标签: java python docker docker-image

我想知道更新在其中运行的Docker容器中的源代码的最佳实践是什么(在JAVA和python中)。我可以修改代码,创建新图像并运行容器。在Java中,我还需要编译代码。 另一个解决方案是只使用一个卷在我的机器和容器之间共享代码,这样,每次我修改代码的行为时,都不需要创建新的Docker映像。

我要求所有这些都是出于开发目的,而不是部署 这两种解决方案之间是否有最佳实践?优缺点都有什么?与python相比,像java这样的编译语言有什么区别吗?

3 个答案:

答案 0 :(得分:0)

您绝对应该制作一个新映像,而不是通过装入的卷共享代码。然后,整个docker意识形态就是产生一个独立的“服务”,该服务可以跨服务器移植(即复制映像)。 Yuo docker文件和映像构建过程将跟踪您的代码版本,即,您可以在docker文件中拉特定的分支,或者可以使用特定标签标记映像。 如果安装了卷,则永远无法确定代码的实际版本。运行。

希望这个原因会帮助您做出决定。

答案 1 :(得分:0)

您应该制作一个新映像,如果您认为创建新映像并进行部署是您的任务,则可以设置CI / CD管道,该管道将自动编译Java代码,创建映像并将其部署用于只要您将代码推送到GIT即可。

答案 2 :(得分:0)

通常,最佳实践是在拥有新的源代码并从该图像运行新容器时创建一个新图像。 Docker可以快速创建并运行新映像,因此您应该利用它。另外,您可以通过标记图像来了解正在运行的代码版本。

您提到在Docker情况下需要编译Java代码,但在任何一种情况下都需要编译。您可以将代码编译到Jar中,然后将Jar添加(或复制)到容器中并在其中运行。

使用外部代码方法时会想到几个快速缺点:您将需要某种外部方法来管理正在运行的代码版本,docker标记会为您解决这些问题。您还需要某种方式来提醒Docker容器新的可执行文件已准备就绪,然后让Docker运行它。另外,您还需要确保Docker容器运行的是与系统运行版本相同的Java(或Python)版本,在Docker中也要注意这一点,因为您可以从Java基础映像进行构建。