使用Docker Compose运行同一个多容器应用程序的副本

问题

我想通过运行2个容器作为一个单元通过Docker运行一个Web应用程序。

1个容器运行我的Web服务器(Tomcat 7)。

另一个容器运行我的数据库(Postgres 9.4)。

我可以运行docker-compose up ,Docker能够像我docker-compose.yml指定的那样启动我的两个容器:

 web: build: . ports: - "5000" links: - db db: image: postgres 

我希望能够通过再次运行docker-compose up我的webapp的另一个副本,但是这导致Docker告诉我已经有容器正在运行:

 $ docker-compose up -d Creating composetest_db_1 Creating composetest_web_1 $ docker-compose up -d composetest_db_1 is up-to-date composetest_web_1 is up-to-date 

我的工作

我已经解决了这个问题,通过使用-p选项给新的副本不同的项目名称:

 $ docker-compose -p project1 up -d ... Successfully built d3268e345f3d Creating project1_web_1 $ docker-compose -p project2 up -d ... Successfully built d3268e345f3d Creating project2_web_1 

不幸的是,这为每个副本创build新的图像:

 $ docker images project1_web latest d3268e345f3d 2 hours ago 682 MB project2_web latest d3268e345f3d 2 hours ago 682 MB 

有没有办法使用docker-compose通过使用单个图像来启动多容器应用程序的多个实例?

如果要重新使用图像,则应该独立于撰写脚本来构build图像。

 run docker build -t somewebapp/web:latest , 

然后更改您的docker-compose.yml的构build部分以引用图像。

您可以通过指定项目名称(默认为目录名称)来重新使用泊坞窗撰写模板:

 $ docker-compose --project-name inst1 up -d Creating inst1_web_1 $ docker-compose --project-name inst2 up -d Creating inst2_web_1 

您还可以在一个项目中放大容器实例:

 $ docker-compose --project-name inst2 scale web=5 Creating and starting 2 ... done Creating and starting 3 ... done Creating and starting 4 ... done Creating and starting 5 ... done 

现在应该有6个容器运行:

 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5e4ab4cebacf tomcat:8.0 "catalina.sh run" 43 seconds ago Up 42 seconds 0.0.0.0:32772->8080/tcp inst2_web_2 ced61f9ac2db tomcat:8.0 "catalina.sh run" 43 seconds ago Up 42 seconds 0.0.0.0:32773->8080/tcp inst2_web_5 efb1ef13147c tomcat:8.0 "catalina.sh run" 43 seconds ago Up 42 seconds 0.0.0.0:32771->8080/tcp inst2_web_4 58e524da3473 tomcat:8.0 "catalina.sh run" 43 seconds ago Up 42 seconds 0.0.0.0:32770->8080/tcp inst2_web_3 0f58c3c3b0ed tomcat:8.0 "catalina.sh run" 2 minutes ago Up 2 minutes 0.0.0.0:32769->8080/tcp inst2_web_1 377e3e5b03e4 tomcat:8.0 "catalina.sh run" 2 minutes ago Up 2 minutes 0.0.0.0:32768->8080/tcp inst1_web_1