一尘不染

运行多个docker compose

docker

我正在使用在3个不同的docker上运行的应用程序:

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

整个应用程序使用 docker-compose up

真的很简单:)

我想使其具有可伸缩性,并且独立于其他应用程序运行整个应用程序的多个实例(3个docker映像),然后放置一个负载平衡器,例如haproxy它将重定向到其中一个应用程序。

我看到我可以使用它,docker-compose up --scale blablabla但是问题是可以缩放容器,但是我真的想保持不同的“应用程序”独立。

例如,如果我想要该应用程序的3个版本,我将有9个dockers映像等。

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

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

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

如果需要紧密绑定的多个容器,则可能需要查看在其“ pods”中运行docker的Kubernetes


阅读 276

收藏
2020-06-17

共1个答案

一尘不染

听起来您只希望Compose应用程序的3个不同环境或“堆栈”彼此独立运行。在这种情况下,您可以使用--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_default,和appv3_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内实现它有帮助。

2020-06-17