Kategorien
Docker Entwicklung Informationen Webapplikationen

Warum wir docker-compose nutzen?

Da die meiste unserer Software oder auch Schnittstellen serverbasiert bereiben werden, haben wir uns vor mehreren Jahren für Docker entschieden. Dies bringt einige Vorteile mit sich. Und zwar die docker-compose Dateien. Mit diesen ist es möglich mehrere Container zu starten, neu zu erstellen oder auch zu entfernen.

In diesem Beispiel wollen wir eine zwei Container herunterladen und diese direkt miteinander verknüpfen. Dabei handelt es sich einmal um echGo und um Watchtower. Mit echGo ist es möglich dateibasierte Benachrichtigungen zu versenden. Hier finden Sie einmal die Dokumentation.

Watchtower ist eine Software mit der wir andere Container auf Updates überwachen können und diese automatisiert mit updaten können. Dies kann bei vielen Lösungen ein Nachteil sein, aber gerade bei kleineren Containerlösungen auch ein großer Vorteil.

Wie fangen wir nun also an?

Im ersten Schritt erstellen Sie bitte eine Datei mit dem Namen docker-compose.yaml. In dieser Datei werden wir alle Anpassungen vornehmen. Stellen Sie bitte ebenfalls sicher, dass auf Ihrem System docker & docker-compose installiert sind.

Nun können Sie den folgenden Code einmal in diese Datei kopieren. Wir werden danach einmal die Datei durchgehen.

version: "3.5"
services:
    echgo:
        container_name: echgo
        networks:
            - default
        volumes:
            - /etc/echgo/configuration:/go/src/app/files/configuration
            - /var/lib/echgo/notification:/go/src/app/files/notification
        labels:
            - com.centurylinklabs.watchtower.enable=true
        restart: always
        image: echgo/echgo:latest
    watchtower:
        container_name: watchtower
        networks:
            - default
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
        ports:
            - 8080:8080
        restart: always
        image: containrrr/watchtower:latest
        command: --cleanup --include-restarting --rolling-restart --include-stopped --label-enable --interval 3600
networks:
    default:

Im ersten Schritt definieren wir die Version der Datei. Danach werden unter services die Container aufgeführt, die mit dieser docker-compose Datei ausgeführt werden sollen.

Hier haben wir zuerst einmal den Dienst echgo und in diesem Dienst werden die Meta Informationen angegeben, die Sie sicherlich auch schon aus den „normalen“ Docker Befehlen kennen.

Hier haben wir einmal den container_name mit diesem setzen wir den internen Namen für diesen Docker Container. Danach kommt direkt der Punkt networks. In diesem können wir das Netzwerk definieren in dem die Container mit einander kommunizieren können. Der generelle Punkt networks wurde am Ende der docker-compose Datei definiert.

Nun werden noch die volumes definiert. Hier werden Verbindungen zwischen dem Docker Container und dem lokalen Speicher des definiert, sodass Daten nach einmal Neustart des Docker Containers nicht einfach verschwinden.

Jetzt definieren wir noch die labels, diese werden benötigt, damit der Container von Watchtower updated werden darf.

Danach wird nur noch der restart Wert auf always gesetzt und auf das Docker Image aus dem Docker Hub verwiesen.

Die selben Attribute sind auch in für den Service watchtower definiert.

Nun wollen wir die Container einmal starten. Dies funktioniert wie folgt. Dazu führen Sie das folgende Kommando aus docker-compose up -d. Nun werden die Container aus dem Docker Hub heruntergeladen und gestartet. Nun können Sie mit dem Kommando docker ps schauen, ob Sie die Container mit den Namen echgo & watchtower finden.

Wenn Sie nun die Container wieder entfernen wollen, dann können Sie dies mit dem folgenden Kommando machen docker-compose down. Nun wurden die Container entfernt. Es bestehen trotzdem z.B. die definierten networks oder auch die Docker Images. Wollen Sie diese gleich mit entfernen, dann können Sie die Container mit diesem Kommando entfernen docker-compose down –rmi all.

Nun wurden alle dazugehörigen Daten entfernt. Die erstellten Verzeichnisse auf ihrem lokalen Gerät bleiben jedoch bestehen.

Wir hoffen, dass wir Ihnen mit diesem kleinen Tutorial weiterhelfen konnten. Bei Fragen schreiben Sie und gerne an info@jj-ideenschmiede.de.

Von Jonas Kwiedor

Full- Stack Developer aus Hamburg. Liebt es sich mit Schnittstellen & Automationen auseinander zu setzen und sich mit der Programmiersprache GO Lang zu beschäftigen.