3_Compose - OTH-AW/isac-oth-aw GitHub Wiki
docker-compose up
Statt einzelne Container zu starten, besser eine .yaml Konfigurationsdatei erstellen. In solch einer Konfigurationsdatei wird eigentlich nichts anderes angegeben als die run commands. Wir gehen hier von einer Anwendung aus, deren Images bereits existieren.
Beispiel:
redis:
image: redis
db:
image: postgres:9.4
vote:
image: voting-app
ports:
- 5000:80
links:
- redis
Diesen ganzen Stack zu starten wäre dann einfach nur ein:
docker-compose up
Wenn ein Image noch nicht in einem Registry z.B. dockerhub existiert, muss die Konfigurationsdatei anders aussehen. Statt dem Schlüssel "key" muss "build" angegeben werden. In diesem Pfad muss sich ein Dockerfile befinden, welches beschreibt, wie das Image erstellt werden kann.
Beispiel:
redis:
image: redis
db:
image: postgres:9.4
vote:
build: ./vote
ports:
- 5000:80
links:
- redis
Die Konfigurationsdatei im Kapitel davor ist "Version 1". Hier gab es noch keine gute Möglichkeit anzugeben, welchen Netzwerktyp man verwenden möchte. Die Version 2 sieht beinahe ähnlich aus. Man gibt die verwendete Version an und schreibt die Konfiguration in einen services Block. Wenn es keinen version-Key gibt, nimmt docker-compose up an, dass es sich um Version 1 handelt. Es spricht nichts dagegen, Version 1 zu verwenden!
Beispiel:
version: 2
services:
redis:
image: redis
db:
image: postgres:9.4
vote:
build: ./vote
ports:
- 5000:80
links:
- redis
Netzwerke: In Version 1 wird standartmäßig alles im default-bridge-netzwerk hinzugefügt. Danach werden Links zum Verlinken zwischen den Containern verwendet.
Beispiel:
version: 2
services:
redis:
image: redis
networks:
- back-end
db:
image: postgres:9.4
networks:
- back-end
vote:
build: ./vote
ports:
- 5000:80
links:
- redis
networks:
- front-end
networks:
front-end:
back-end:
Mit Version 2 ist die explizite Angabe der Links nicht mehr notwendig, da Docker Compose hier für diesen Stack ein "eigenes Netzwerk" für diese Bestandteile erzeugt und diesen Containern die jeweiligen Containernamen automatisch bereitgestellt werden. Dadurch kann man in der Konfiguration Links entfernen.
Beispiel:
version: 2
services:
redis:
image: redis
db:
image: postgres:9.4
vote:
build: ./vote
ports:
- 5000:80
Depends_on in Version 2: Wird erst gestartet, wenn XYZ gestartet wurde.
Beispiel:
version: 2
services:
redis:
image: redis
db:
image: postgres:9.4
vote:
build: ./vote
ports:
- 5000:80
depends_on:
- redis
Fügt Docker Swarm hinzu.
Beispiel:
version: 3
services:
redis:
image: redis
db:
image: postgres:9.4
vote:
build: ./vote
ports:
- 5000:80