运行多个docker撰写

时间:2017-05-13 19:35:06

标签: docker kubernetes docker-compose

我正在使用在3个不同的码头工具上运行的应用程序:

  • 第一个是使用REST API调用的服务器HTTP
  • 第二个是rabbitmq
  • 第三个是工人

使用docker-compose up

启动整个应用程序

非常简单:)

我想使其可扩展并独立于其他应用程序运行整个应用程序的多个实例(3个docker镜像),然后放置一个负载均衡器,如haproxy,它将重定向到其中一个应用程序。

我看到我可以使用docker-compose up --scale blablabla,但问题是我可以扩展容器,但我真的想保留不同的应用程序"独立的。

例如,如果我想要3个版本的应用程序,我将有9个泊坞窗图像等。

我看到我们可以使用--privilege在docker中运行docker(允许我在里面创建一个带有3个docker的docker)但是我在Stack Overflow上读到它不是一个合适的解决方案。

你有解决方案吗?或至少阅读一些文件。

我听说Kubernetes可能是一个解决方案,但我不确定。我读了(在堆栈上)

  

如果您需要紧密绑定多个容器,您可能需要查看在其#34; pods中运行docker的Kubernetes"

2 个答案:

答案 0 :(得分:24)

听起来你只想要3个不同的环境或Compose应用程序的“堆栈”彼此独立运行。如果是这种情况,您可以使用--project-name-p选项docker-compose处理此问题。一个例子是这样的:

  • 启动应用程序版本1:docker-compose -p appv1 up -d
  • 启动应用程序版本2:docker-compose -p appv2 up -d
  • 启动应用程序版本3:docker-compose -p appv3 up -d

此时,您将运行3组不同的容器,这些容器可以彼此独立地扩展。 Docker Compose将项目名称(通常从文件夹名称推断)添加到容器名称之前。您最终会得到appv1_worker_1appv2_worker_1appv3_worker1等容器名称。如果您只扩展appv2工作服务(docker-compose -p appv2 scale worker=2),那么您将获得额外的appv2_worker_2

默认情况下,compose始终会创建容器可以在其中进行通话的默认网络。在这种情况下,您将拥有3个独立的网络(appv1_defaultappv2_defaultappv3_default)。

如果您接下来想为每个项目名称运行不同的图像,则可以在docker-compose.yml中使用环境变量插值。例如,您可以为服务指定image: ${MYIMAGE},然后执行以下操作:

  • MYIMAGE=myorg/myapp:v1 docker-compose -p appv1 up -d
  • MYIMAGE=myorg/myapp:v2 docker-compose -p appv2 up -d

希望这有助于在Docker Compose中做到这一点。

答案 1 :(得分:4)

如果要从单个命令一次运行多个docker-compose文件,请使用此方法。 如果撰写文件是docker-compose1.yml和docker-compose2.yml,则可以使用

来运行两个docker文件。

docker-compose -f docker-compose1.yml -f docker-compose2.yml起