docker-compose creating multiple instances for the same image
DockerDocker ComposeDocker ContainerDocker Problem Overview
I need to start multiple containers for the same image. If i create my compose file as shown below, it works fine.
version: '2'
services:
app01:
image: app
app02:
image: app
app03:
image: app
app04:
image: app
app05:
image: app
Is there any easy way for me to mention the number of instances for the compose instead of copy and pasting multiple times?
Docker Solutions
Solution 1 - Docker
Updated answer (Oct 2017)
As others mentioned, the docker API has changed. I'm updating my answer since it's the one most people will probably look at.
docker-compose up -d --scale app=5
Unfortunately, we cannot specify this in a docker-compose.yml file currently (as of version 3.5).
Details:
They did introduce the scale
option for version 2.2 and 2.3 of docker-compose but removed it for version 3.0. Also, to use version 2.2 or 2.3 you would need to download an older version of the docker-compose tool. The current version does not support 2.2 or 2.3 (it does support 2.0 or 2.1 however).
There is also a new deploy
section with replicas: 5
but it's only for swarm mode.
--- Old Answer --------------------------------------
docker-compose scale app=5
See https://docs.docker.com/compose/reference/scale/
Then you only need this docker-compose file
version: '2'
services:
app:
image: app
Solution 2 - Docker
You can do it with replica
as mentioned in https://docs.docker.com/compose/compose-file/#replicas
version: '3'
services:
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 6
Edit (from the comments): One can use docker-compose --compatibility up
to make docker accept deploy section without using swarm.
Solution 3 - Docker
The scale
command is now deprecated, you should use up
instead.
docker-compose up --scale app=2
more details in https://docs.docker.com/compose/reference/up
Solution 4 - Docker
You can do this:
version: "3.4"
services:
service1: &service_1
image: app
service2:
<<: *service_1
service3:
<<: *service_1
For more information on <<
: https://stackoverflow.com/questions/41063361/what-is-the-double-left-arrow-syntax-in-yaml-called-and-wheres-it-specced