一个Java Web应用程序数据库有多less个docker集装箱?

我试图“dockerize”我的Java Web应用程序,并最终在EC2上运行Docker镜像。

我的应用程序是一个WAR文件并连接到一个数据库。 还有一个应用程序通过REST调用的python脚本。 python方面使用龙卷风web服务器

问题1:

我应该有以下的Docker容器吗?

  1. 应用程序服务器容器(Tomcat 7)
  2. HTTP服务器的容器(httpd的nginx)
  3. 容器postgres分贝
  4. python脚本容器(这将有龙卷风web服务器和我的python脚本)。

问题2:

build立dockerfile的最好方法是什么? 我将不得不对每个容器的dockerfile文件进行试错。 我应该有一个Ubuntu的虚拟机,我做了试验和错误,一旦我确定了我需要哪些命令,然后把它们放入该容器的dockerfile?

这个清单看起来是正确的。

将堆栈分割为独立的容器的好处在于,您可以(在很多情况下)使用现成的官方映像,只需提供正确的configuration即可使它们一起工作。 另外,您可以分别升级组件(容器)。

请注意,将多个服务合并到一个容器中是不被禁止的 ,但是在Docker中,分离问题是最好的实践,并且只有一个容器只负责一个任务/服务。

为了让所有容器以正确的configuration启动, docker-compose是一个不错的select。 它使您能够创build描述项目的单个文件( docker-compose.yml https://docs.docker.com/compose/compose-file/ ); 要为每个容器build立哪些图像,容器如何相互关联,并将configuration传递给它们。

用docker-compose,你可以通过运行docker-compose up -d来启动所有容器

您可以使用Docker Machine在Mac或Windows上创buildDocker开发环境。 这对于试验和错误是非常好的。 没有必要为Ubuntu VM。

Docker容器只做一件事。 所以你的应用程序将由多个容器组成,每个组件一个。 你也清楚地确定了你的应用程序的不同容器。 以下是工作stream程的样子:

  1. 为Tomcat容器,nginx,postgres,龙卷风创build一个Dockerfile
  2. 将应用程序部署到Dockerfile中的Tomcat或映射卷
  3. 为每个容器创build图像
  4. 可选将这些图像推送到Docker中心
  5. 如果您打算在多台主机上部署这些容器,请创build一个覆盖networking
  6. 使用Docker Compose将这些容器一起启动。 它会使用之前创build的networking。 或者,您也可以使用Docker Compose的--x-networking来创buildnetworking。