docker的容器VS应用程序容器

我不知道什么是使用docker集装箱的最佳做法。 当我使用虚拟机,比如说Ubuntu,运行一个Web应用程序时,我安装了运行应用程序所需的所有软件,比如数据库,Web服务等,并且像独立的操作系统一样使用。

但是,Docker可以以不同的方式使用。

鉴于我想运行一个Web应用程序的场景,我有两个select:

  1. 将所有软件安装在一个容器上; 安装数据库,Java以及运行所需的所有其他必要软件(即像使用VM一样使用)。

  2. 将每个应用程序安装在单独的容器上 一个容器中的数据库,另一个容器上的Web服务,并让他们相互交谈。

选项1)似乎更容易部署完整堆栈的应用程序,但是如果软件包之间存在一些依赖性复杂化问题或为每个软件分配操作系统资源,则可能难以扩展。

选项2)似乎很难部署,但每个容器都可以升级而不会太痛苦。

Docker用户的常见做法是什么?

编辑:回答这也是在https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#run-only-one-process-per-container

最好的方法是为每个服务(应用程序)使用单独的容器。 通过这种方式,您可以独立于其他容器升级/修改每个服务。 Docker对于微服务体系结构非常有用。

使用Docker Compose只用一个命令来运行所有的容器: docker-compose up 。 在Docker Compose中,您可以定义容器之间的依赖关系。 所以,他们会自动连接。

如果你想运行在一个单独的Linux主机上的每个容器,你可以使用Docker Swarm ,以便你不必关心networking。