带有混合基础镜像的 Docker 镜像
Posted
技术标签:
【中文标题】带有混合基础镜像的 Docker 镜像【英文标题】:Docker Image with Mixin of Base Images 【发布时间】:2017-12-31 16:15:37 【问题描述】:我想构建一个使用 NodeJs 和 Java Runtime 的 docker 镜像。
可以找到单独的 docker 文件,每个基地一个。
如何使用两个 base 来创建新图像?
在这种情况下,我将在同一个图像中运行一个 Angular 应用和一个 Spring 应用。
关于如何拥有具有此类要求的单个图像的任何提示?有意义吗?
【问题讨论】:
不能运行三个容器吗?节点,java和生成的角度应用程序?当您开始将服务压缩到一个容器中时,架构通常会出现一些非常错误的问题。问问自己是否可以通过运行多个容器实例来扩展您的应用。 很好,我其实是把两者分开了…… 【参考方案1】:如果这对您的情况有意义,很难从外部判断。一般来说,图像应该做一件事,特别是运行一个应用程序。好像您在一个容器中混合了两种东西。如果您真的想这样做,我会选择“更难安装”的图像并将其选为基础图像(似乎是 Spring 图像)。然后我会添加 node.js 的包,它应该只有几行代码。由于大多数 Dockerfile 都是公开的,因此您可以查找镜像并为这两个应用构建自己的镜像。
但总的来说,这听起来你真的需要两张图片,一张用于 Angular 的东西,一张用于 Spring 的东西。然后,您可以使用 docker-compose 或手动通过链接来组合这些图像(如果需要)。
【讨论】:
听起来不错!我同意你的观点,会有不同的图像。当我使用 docker-compose 时,它是创建一个新的图像,还是只是为了编排容器? @FilipeMiranda 您可以使用服务中的build
属性来扩展图像。另一种方法是仅使用 image
引用预构建的镜像(在构建系统创建镜像时很常见)。
docker-compose 编排和链接图像的容器。如果您链接它们并安装卷,它会自动创建您的容器网络。值得一试,我几乎在所有项目中都使用它。 build
覆盖 Dockerfile 的 CMD
部分,就是这样。使用image
,您可以在合成中定义基本图像,这可能是您的两个图像之一。网上有很多这样的例子。以上是关于带有混合基础镜像的 Docker 镜像的主要内容,如果未能解决你的问题,请参考以下文章