docker-compose为同一图像创建多个实例


78

我需要为同一张图片启动多个容器。如果我按如下所示创建我的撰写文件,则可以正常工作。

version: '2'

services:
  app01:
    image: app
  app02:
    image: app
  app03:
    image: app
  app04:
    image: app
  app05:
    image: app  

我有什么简单的方法可以提及撰写实例的数量,而不是多次复制和粘贴?

Answers:


90

更新的答案(2017年10月)

正如其他人提到的那样,docker API已更改。我正在更新我的答案,因为这是大多数人可能会看到的答案。

docker-compose up -d --scale app=5

不幸的是,我们目前无法在docker-compose.yml文件中指定此版本(从3.5版开始)。

详细信息:
他们确实scale为docker-compose的2.2和2.3版本引入了该选项,但为3.0版删除了该选项。另外,要使用2.2或2.3版本,您需要下载旧版本的docker-compose工具。当前版本不支持2.2或2.3(但是支持2.0或2.1)。还有一个新deploy部分,replicas: 5但仅适用于群体模式。

---旧答案--------------------------------------

docker-compose scale app=5

参见https://docs.docker.com/compose/reference/scale/

然后,您只需要此docker-compose文件

version: '2'

services:
  app:
    image: app

4
有没有一种方法可以在docker-compose文件中指定它,以便在运行时docker-compose up,它将运行预先配置的实例数?
奥古斯都(Augustomen),2017年

1
如何设置容器的端口范围?
穆罕默德·阿布拉

1
@MuhammadAbrar您可以将端口指定为与任何服务相同。无论是使用expose:在同一网络上暴露的端口到其他服务或ports:暴露端口到主机(公开访问)。docs.docker.com/compose/compose-file/#short-syntax-1
Bernard

1
请注意,省略-d(守护程序模式)意味着一旦使用Ctrl + C终止最后一个缩放的容器,所有使用同一docker-compose文件启动的容器都将停止。非常危险。我建议加入-ddocker-compose up在上面的答案,以避免复制/粘贴灾害。
Marco Chiappetta

1
@MarcoChiappetta好点。我通常这样做up -d。这次是错别字。
伯纳德

29

scale现在不推荐使用该命令,up而应该使用它。

docker-compose up --scale app=2

更多细节在https://docs.docker.com/compose/reference/up


这实际上是有问题的,并且不在文档中讨论。如果我们有服务A,B,C,并且我们进行docker-compose up --scale B = 1,那么它将开始所有A,B,C,所以它等效于docker-compose up --scale A = 1--标尺B = 2-标尺C = 1。我很确定这在很多情况下都不是用户想要的。
Shiva Wu,

@fssilva,此命令在我的情况下有效。但是,我必须修改我的撰写文件。(1)撰写文件,以解决删除容器名称“名称已经由容器”错误使用(2)显式删除端口绑定来解决。‘失败:端口已分配’的错误。
harshit2811

24

您可以replica按照https://docs.docker.com/compose/compose-file/#replicas中所述进行操作

version: '3'
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 6

编辑(根据评论):可以docker-compose --compatibility up使docker接受部署部分,而无需使用swarm。


24
副本仅适用于成群部署。
肯J

3
是的,如果普通docker-compose up命令忽略了该选项。
giorgiosironi

3
deploy前奏/报头的文档状态,整个部分由忽略docker-compose updocs.docker.com/compose/compose-file/#deploy
hcarty

21
可以不使用swarmdocker-compose --compatibility up而使docker接受deploy部分。
尼古拉·佩特坎斯基

2
@NikolaPetkanski您的评论应标记为正确答案。谢谢!
Rinor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.