运行多个docker撰写
我正在使用在3个不同的docker上运行的应用程序:
- 第一个是可用REST API调用的服务器HTTP
- 第二个是rabbitmq
- 第三个是工人
整个应用程序是由docker-compose up
真的很简单:)
我想使其具有可伸缩性,并且独立于其他应用程序运行整个应用程序(3个docker映像)的多个实例,然后放置一个像haproxy
这样的负载均衡器,它将redirect到其中一个应用程序。
我看到,我可以使用docker-compose up --scale blablabla
但是这个问题是,我可以缩放容器,但我真的想保持不同的“应用程序”独立。
例如,如果我想要3个版本的应用程序,我将有9个docker图像等
我看到我们可以使用--privilege
(允许我用3个--privilege
创build一个--privilege
在--privilege
内部运行--privilege
但是我在Stack Overflow上看到这不是一个合适的解决scheme。
你有解决scheme吗? 或者至less有一些文件要阅读。
我听说Kubernetes可能是一个解决scheme,但我不知道。 我读(堆栈)
如果你需要紧紧绑定多个容器,你可能想看看在他们的“豆荚”里面运行docker的Kubernetes,
这听起来像是你只想要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_1
, appv2_worker_1
, appv3_worker1
。 如果您只appv2
工作服务( appv2
docker-compose -p appv2 scale worker=2
),那么您将获得一个额外的appv2_worker_2
。
默认情况下,compose始终创build容器可以在其中进行交谈的默认networking。 在这种情况下,您将拥有3个独立的networking( appv1_default
, appv2_default
和appv3_default
)。
如果您接下来想要为每个项目名称运行不同的图像,则可以在docker-compose.yml
使用环境variables插值。 例如,您可以为服务指定image: ${MYIMAGE}
,然后执行如下操作:
-
MYIMAGE=myorg/myapp:v1 docker-compose -p appv1 up -d
-
MYIMAGE=myorg/myapp:v2 docker-compose -p appv2 up -d
希望这是一个有用的想法,在Docker Compose里面做。