'Docker-Compose' Creating Multiple Instances for the Same Image
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...
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 an easy way for me to mention the number of instances for the compose instead of copy and pasting multiple times?
5 Answers
Updated answer (Jul 2023)
The old "scale" feature is now called replicas and it is part of the current Docker Compose specs, 2.19.1 as of writing.
Note that replicas is ignored if you name your container using container_name: myname. You must let the Docker generate the names.
services:
myapp:
image: awesome/webapp
deploy:
mode: replicated
replicas: 6
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 (1.18.0 in re-numbered version).
Details:
They did introduce the scale option for version 2.2 and 2.3 of docker-compose, but they 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 docker compose up.
Then you only need this docker-compose file:
version: '2'
services:
app:
image: app
You can do it with replica as mentioned in Compose specification:
version: '3'
services:
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 6
One can use docker-compose --compatibility up to make Docker accept a deploy section without using swarm.
The scale command is now deprecated, and you should use up instead.
docker-compose up --scale app=2
More details are on docker compose up.
You can do this:
version: "3.4"
services:
service1: &service_1
image: app
service2:
<<: *service_1
service3:
<<: *service_1
For more information on <<, see What is the << (double left arrow) syntax in YAML called, and where's it specified?.
Works for me well:
version: "3.9"
services:
web:
image: redis:6.2-alpine
...
deploy:
mode: replicated
replicas: 3
and run the command then:
docker-compose --compatibility up