3_Compose - OTH-AW/isac-oth-aw GitHub Wiki

Docker Compose

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

Docker Compose Build

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

Docker Compose Versions

Version 1 vs. Version 2

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

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
Version 3

Fügt Docker Swarm hinzu.

Beispiel:

version: 3
services:
    redis:
        image: redis
    db:
        image: postgres:9.4
    vote:
        build: ./vote
        ports:
            - 5000:80
⚠️ **GitHub.com Fallback** ⚠️