java 带有/数据库的网络应用程序应该有多少个 docker 容器?
how many docker containers should a java web app w/ database have?
我正在尝试 "dockerize" 我的 java 网络应用程序,最后 运行 EC2 上的 docker 图像。
我的应用程序是一个 WAR 文件并连接到数据库。还有一个 python 脚本,应用程序通过 REST 调用该脚本。 python 端使用 tornado 网络服务器
问题一:
我应该有以下 Docker 个容器吗?
- 应用程序服务器容器(Tomcat 7)
- HTTP 服务器的容器(httpd 的 nginx)
- postgres 数据库的容器
- python 脚本的容器(这将包含 tornado 网络服务器和我的 python 脚本)。
问题二:
构建 docker 文件的最佳方法是什么?对于需要将哪些命令放入每个容器的 docker 文件,我将不得不反复试验。我是否应该有一个 ubuntu 虚拟机,在上面进行反复试验,一旦我确定了我需要的命令,然后将它们放入该容器的 docker 文件中?
您可以使用 Docker Machine 在 Mac 或 Windows 上创建 Docker 开发环境。这非常适合反复试验。 Ubuntu VM 不需要。
Docker容器只做一件事。因此,您的应用程序将由多个容器组成,每个容器一个。您还清楚地确定了应用程序的不同容器。工作流程可能如下所示:
- 为 Tomcat 容器、nginx、postgres、tornado 创建一个 Docker 文件
- 将应用程序部署到 Tomcat 中的 Docker 文件或通过映射卷
- 为每个容器创建镜像
- 可选择将这些图像推送到 Docker 集线器
- 如果您计划在多台主机上部署这些容器,请创建覆盖网络
- 使用Docker Compose 一起启动这些容器。它将使用之前创建的网络。或者,您也可以使用
--x-networking
for Docker Compose 来创建网络。
该列表看起来是正确的。
将堆栈拆分到单独容器的优点是您可以(在许多情况下)使用 off-the-shelf 官方图像,并且只需要提供正确的配置即可使它们协同工作。此外,您还可以单独升级组件(容器)。
请注意,禁止将多个服务合并到一个容器中,但在Docker中,分离关注点是总体最佳做法,并且有一个
单个容器只负责单个task/service.
要让所有容器以正确的配置启动,docker-compose 是
不错的选择;它使您能够创建一个文件 (docker-compose.yml
https://docs.docker.com/compose/compose-file/)
描述您的项目;为每个容器构建哪些图像,容器如何与 each-other 相关,并将配置传递给它们。
有了 docker-compose,你就可以通过 运行 启动所有容器
docker-compose up -d
我正在尝试 "dockerize" 我的 java 网络应用程序,最后 运行 EC2 上的 docker 图像。
我的应用程序是一个 WAR 文件并连接到数据库。还有一个 python 脚本,应用程序通过 REST 调用该脚本。 python 端使用 tornado 网络服务器
问题一:
我应该有以下 Docker 个容器吗?
- 应用程序服务器容器(Tomcat 7)
- HTTP 服务器的容器(httpd 的 nginx)
- postgres 数据库的容器
- python 脚本的容器(这将包含 tornado 网络服务器和我的 python 脚本)。
问题二:
构建 docker 文件的最佳方法是什么?对于需要将哪些命令放入每个容器的 docker 文件,我将不得不反复试验。我是否应该有一个 ubuntu 虚拟机,在上面进行反复试验,一旦我确定了我需要的命令,然后将它们放入该容器的 docker 文件中?
您可以使用 Docker Machine 在 Mac 或 Windows 上创建 Docker 开发环境。这非常适合反复试验。 Ubuntu VM 不需要。
Docker容器只做一件事。因此,您的应用程序将由多个容器组成,每个容器一个。您还清楚地确定了应用程序的不同容器。工作流程可能如下所示:
- 为 Tomcat 容器、nginx、postgres、tornado 创建一个 Docker 文件
- 将应用程序部署到 Tomcat 中的 Docker 文件或通过映射卷
- 为每个容器创建镜像
- 可选择将这些图像推送到 Docker 集线器
- 如果您计划在多台主机上部署这些容器,请创建覆盖网络
- 使用Docker Compose 一起启动这些容器。它将使用之前创建的网络。或者,您也可以使用
--x-networking
for Docker Compose 来创建网络。
该列表看起来是正确的。
将堆栈拆分到单独容器的优点是您可以(在许多情况下)使用 off-the-shelf 官方图像,并且只需要提供正确的配置即可使它们协同工作。此外,您还可以单独升级组件(容器)。
请注意,禁止将多个服务合并到一个容器中,但在Docker中,分离关注点是总体最佳做法,并且有一个 单个容器只负责单个task/service.
要让所有容器以正确的配置启动,docker-compose 是
不错的选择;它使您能够创建一个文件 (docker-compose.yml
https://docs.docker.com/compose/compose-file/)
描述您的项目;为每个容器构建哪些图像,容器如何与 each-other 相关,并将配置传递给它们。
有了 docker-compose,你就可以通过 运行 启动所有容器
docker-compose up -d