docker-compose creating multiple instances for the same image

DockerDocker ComposeDocker Container

Docker 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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKitKarsonView Question on Stackoverflow
Solution 1 - DockerBernardView Answer on Stackoverflow
Solution 2 - DockerEsraView Answer on Stackoverflow
Solution 3 - DockerfssilvaView Answer on Stackoverflow
Solution 4 - DockerLenny4View Answer on Stackoverflow