Docker-Compose erstellt mehrere Instanzen für dasselbe Image

75

Ich muss mehrere Container für dasselbe Image starten. Wenn ich meine Compose-Datei wie unten gezeigt erstelle, funktioniert es einwandfrei.

version: '2'

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

Gibt es eine einfache Möglichkeit für mich, die Anzahl der Instanzen für das Verfassen anzugeben, anstatt sie mehrmals zu kopieren und einzufügen?

KitKarson
quelle

Antworten:

89

Aktualisierte Antwort (Okt 2017)

Wie bereits erwähnt, hat sich die Docker-API geändert. Ich aktualisiere meine Antwort, da es die ist, die die meisten Leute wahrscheinlich sehen werden.

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

Leider können wir dies derzeit nicht in einer docker-compose.yml-Datei angeben (ab Version 3.5).

Details:
Sie haben die scaleOption für Version 2.2 und 2.3 von Docker-Compose eingeführt, sie jedoch für Version 3.0 entfernt. Um Version 2.2 oder 2.3 verwenden zu können, müssen Sie außerdem eine ältere Version des Docker-Compose-Tools herunterladen. Die aktuelle Version unterstützt 2.2 oder 2.3 nicht (jedoch 2.0 oder 2.1). Es gibt auch einen neuen deployAbschnitt mit, replicas: 5aber nur für den Schwarmmodus.

--- Alte Antwort ----------------------------------

docker-compose scale app=5

Siehe https://docs.docker.com/compose/reference/scale/

Dann brauchen Sie nur noch diese Docker-Compose-Datei

version: '2'

services:
  app:
    image: app
Bernard
quelle
4
Gibt es eine Möglichkeit, dies in der Docker-Compose-Datei anzugeben, damit beim docker-compose upAusführen die vorkonfigurierte Anzahl von Instanzen ausgeführt wird?
Augustomen
1
Wie stellen Sie den Portbereich für die Container ein?
Muhammad Abrar
1
@MuhammadAbrar Sie geben die Ports wie bei jedem Dienst an. Entweder expose:zum Offenlegen von Ports für andere Dienste im selben Netzwerk oder ports:zum Freigeben von Ports für den Host (öffentlich zugänglich). docs.docker.com/compose/compose-file/#short-syntax-1
Bernard
1
Beachten Sie, dass das Weglassen -d(Daemon-Modus) bedeutet, dass alle Container, die mit derselben docker-composeDatei gestartet wurden, gestoppt werden, sobald Strg + C zum Beenden des zuletzt skalierten Containers verwendet wird. Sehr gefährlich. Ich würde vorschlagen -d, docker-compose upin der obigen Antwort etwas hinzuzufügen , um Katastrophen beim Kopieren / Einfügen zu vermeiden.
Marco Chiappetta
1
@ MarcoChiappetta guter Punkt. Normalerweise mache ich das up -d. Tippfehler dieses Mal.
Bernard
29

Der scaleBefehl ist jetzt veraltet. Sie sollten ihn upstattdessen verwenden.

docker-compose up --scale app=2

Weitere Informationen finden Sie unter https://docs.docker.com/compose/reference/up

fssilva
quelle
Dies ist tatsächlich problematisch und wird im Dokument nicht behandelt. Wenn wir die Dienste A, B, C haben und Docker komponieren - Skala B = 2, werden alle A, B, C gestartet, also entspricht es Docker komponieren - Skala A = 1 - Skala B = 2 - Skala C = 1. Ich bin mir ziemlich sicher, dass dies in vielen Fällen nicht das ist, was der Benutzer möchte.
Shiva Wu
@fssilva, Dieser Befehl hat in meinem Fall funktioniert. Ich muss jedoch meine Erstellungsdatei ändern. (1) entfernen Containername aus compose Datei zu lösen „Name ist bereits von Containern‘ Fehlern (2) entfernen explizite Port Bindungen zu lösen. ‚Fehlgeschlagen:. Port ist bereits vergeben‘ Fehler
harshit2811
24

Sie können dies replicawie unter https://docs.docker.com/compose/compose-file/#replicas beschrieben tun

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

Bearbeiten (aus den Kommentaren): Damit kann docker-compose --compatibility upDocker den Bereitstellungsabschnitt akzeptieren, ohne Schwarm zu verwenden.

Esra
quelle
24
Replikate sind nur für die Bereitstellung in einem Schwarm vorgesehen.
Ken J
3
Ja, wenn die Option von normalen docker-compose upBefehlen ignoriert wird .
Giorgiosironi
3
Die deployIntro / Header-Dokumente geben an, dass der gesamte Abschnitt von docker-compose up( docs.docker.com/compose/compose-file/#deploy ) ignoriert wird
hcarty
21
Man kann docker-compose --compatibility upDocker dazu bringen, deployAbschnitte zu akzeptieren, ohne Schwarm zu verwenden.
Nikola Petkanski
2
@NikolaPetkanski Ihr Kommentar sollte als die richtige Antwort markiert werden. Vielen Dank!
Rinor