【问题标题】:how many docker containers should a java web app w/ database have?一个带有/数据库的 java web 应用程序应该有多少个 docker 容器?
【发布时间】:2016-01-19 19:01:23
【问题描述】:

我正在尝试“dockerize”我的 java web 应用程序并最终在 EC2 上运行 docker 映像。

我的应用程序是一个 WAR 文件并连接到数据库。还有一个应用程序通过 REST 调用的 python 脚本。 python端使用tornado webserver

问题 1:

我应该有以下 Docker 容器吗?

  1. 应用服务器容器 (Tomcat 7)
  2. HTTP 服务器的容器(httpd 的 nginx)
  3. postgres 数据库容器
  4. python 脚本的容器(这将有 tornado web 服务器和我的 python 脚本)。

问题 2:

构建 dockerfile 的最佳方法是什么?对于需要将哪些命令放入每个容器的 dockerfile 中,我将不得不反复试验。我是否应该有一个 ubuntu 虚拟机,在上面进行反复试验,一旦确定需要哪些命令,然后将它们放入该容器的 dockerfile 中?

【问题讨论】:

  • 我想你想要 docker-compose ... 它让它变得非常简单

标签: python tomcat docker application-server


【解决方案1】:

这个列表看起来不错。

将堆栈拆分为单独的容器的好处是,您可以(在许多情况下)使用现成的官方映像,并且只需提供正确的配置以使它们一起工作。此外,您还可以单独升级组件(容器)。

请注意,禁止在单个容器中组合多个服务,但在 Docker 中,将关注点分开是整体最佳实践,并有一个 单个容器只负责单个任务/服务。

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

使用 docker-compose,您只需运行即可启动所有容器 docker-compose up -d

【讨论】:

    【解决方案2】:

    您可以使用 Docker Machine 在 Mac 或 Windows 上创建 Docker 开发环境。这对于反复试验非常有用。 Ubuntu VM 不需要。

    Docker 容器只做一件事。因此,您的应用程序将包含多个容器,每个组件一个容器。您还清楚地确定了应用程序的不同容器。以下是工作流程的样子:

    1. 为 Tomcat 容器、nginx、postgres、tornado 创建 Dockerfile
    2. 在 Dockerfile 中或通过映射卷将应用程序部署到 Tomcat
    3. 为每个容器创建图像
    4. 可选择将这些映像推送到 Docker 中心
    5. 如果您计划在多台主机上部署这些容器,请创建一个覆盖网络
    6. 使用 Docker Compose 一起启动这些容器。它将使用之前创建的网络。或者,您也可以使用--x-networking 用于 Docker Compose 来创建网络。

    【讨论】:

      猜你喜欢
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      • 2015-04-03
      • 2020-03-22
      相关资源
      最近更新 更多