猿问

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

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

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


撒科打诨
浏览 93回答 4
4回答

holdtom

这是我的问题,我以这种方式找到了它对于开发,您可以绑定一个卷。在这个例子中,我假设你已经在 3000 上暴露了一个端口,而不是一个绝对项目地址注意如果你在你的 shell 中的项目目录中,你可以使用 $(pwd)docker run -d -p 3000:3000 -v absolute-project-address:/app image-name你也可以添加你的卷名来存储数据docker run -d -p 3000:3000 -v absolute-project-address:/app -v volumeName:/app/data image-name但是为了生产,你必须创建一个图像

慕莱坞森

您绝对应该制作一个新图像,而不是通过已安装的卷共享代码。那么整个 docker 的思想就是产生一个自包含的“服务”,它可以跨服务器移植(即复制图像)。Yuo docker 文件和镜像构建过程将跟踪您的代码版本,即在您的 docker 文件中,您可以拉取特定分支,或者您可以使用特定标签标记镜像。在安装卷的情况下,您永远无法确定您的代码实际上是什么版本。跑。希望仅凭这个原因就可以帮助您做出决定。

catspeake

一般来说,最好的做法是在您拥有新的源代码并从该图像运行新容器时创建一个新图像。Docker 可以快速创建和运行新镜像,所以你应该利用它。此外,您可以通过标记图像来了解您正在运行的代码版本。您提到您需要在 Docker 案例中编译 Java 代码,但在任何一种情况下都需要。您可以将您的代码编译成一个 Jar,然后将 Jar 添加(或复制)到您的容器中并在那里运行它。使用外部代码方法会想到一些快速的缺点:您需要一些外部方法来管理正在运行的代码版本,docker tags 会为您处理。您还需要一些方法来提醒 Docker 容器一个新的可执行文件已准备好,然后让 Docker 运行它。此外,您需要确保您的 Docker 容器运行的 Java(或 Python)版本与您的系统运行的版本相同,这在 Docker 中也得到了处理,因为您可以从 Java 基础映像构建。

德玛西亚99

您应该创建一个新映像,如果您认为创建一个新映像和部署是您的任务,那么您可以设置一个 CI/CD 管道,它将自动编译 java 代码、创建一个映像并在您随时为您部署它将代码推送到 GIT。
随时随地看视频慕课网APP

相关分类

Java
我要回答