我可以在单个dockerfile上使用多个应用程序吗?

时间:2019-04-08 19:44:03

标签: docker kubernetes containers

我们正在探索docker,并试图找出docker是否提供一种方法来消除当前使用的方法的管理开销。

我们正在寻找类似以下的内容:

  1. 具有一个基本模板,该模板具有Linux OS + App1- Oracle + App2-Mysql + App3-Mongodb

  2. 每当我们有请求时,我们都应该能够将Container从特定应用程序的基本模板中拉出。例如:装有Linux OS +仅安装Oracle应用程序的容器。同样,OS + Mongodb在另一个容器上

  3. 我们对每个应用程序都有不同的模板有一个限制,因此我们只需要一个主模板即可拥有所有应用程序,并且每次仅从基本模板启用特定应用程序时才拉容器。

任何有关如何实现这一目标的指针将有所帮助。 dockerfile或其他可以帮助吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

可以吗?是。你应该?不。

分层文件系统意味着您可以设计多个图像并共享文件系统的公共部分。您可以使用Dockerfile顶部的公共部分或公共基础映像来设计Dockerfile。这些部分的共同点应该是最小的,由于对app1的更改,您不必重建app2。

应标记图像,每个应用程序具有不同的存储库,并且每个应用程序的不同版本具有不同的标记。映像本身应包含运行应用程序所需的二进制文件,库和其他依赖项,但不包含配置或持久性数据。配置从外部注入环境变量,命令行参数,配置,机密或只读卷。而且数据几乎总是保存到卷或数据库中。

如果操作系统包含Linux内核,则映像不包含操作系统。容器从主机OS共享内核。不要将容器与VM混淆,它们是不同的,行为不同,管理方式也不同。

要混合和匹配具有不同配置和数据库的不同应用程序,最有意义的是将其移至可指定要部署哪些映像和配置的compose或kubernetes yml文件。更改应用程序时,不仅要更改整体图像的配置,还要为该特定任务提取适当的图像。

答案 1 :(得分:0)

每个Docker应该具有一个 PID 。这意味着我们应该在一个容器中运行一项服务

答案 2 :(得分:0)

您可以执行此操作,但绝对不要在一个容器中合并多个服务。它有很多缺点,没有好处。

一些缺点:

  1. 您不能有效地限制用于不同服务的资源
  2. 您不能独立扩展一项服务
  3. 您的图片将很大,因为无法使用缓存
  4. 有时您无法解决冲突的依赖关系