Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Konfiguration der Docker-Compose-Datei | Überwachung & Protokollierung in DevOps
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Einführung in DevOps

bookKonfiguration der Docker-Compose-Datei

Nachdem alle notwendigen Konfigurationen vorgenommen wurden — für Filebeat, Logstash und die Flask-Anwendung — ist es an der Zeit, diese zusammenzuführen und als ein einziges System auszuführen. Dafür verwenden wir Docker Compose.

Note
Definition

Docker Compose ist ein Tool, mit dem alle benötigten Container in einer einzigen YAML-Datei definiert und mit einem Befehl gestartet werden können.

Anstatt für jeden Dienst einen separaten docker run-Befehl zu schreiben, werden deren Konfigurationen in docker-compose.yml hinterlegt und alles gemeinsam gestartet.

Eine einfache docker-compose.yml-Datei sieht folgendermaßen aus:

docker-compose.yml

docker-compose.yml

copy

Erstellen wir nun schrittweise eine vollständige Datei und erläutern dabei jeden Container.

Flask-Anwendung

Dies ist Ihre Hauptanwendung, die Protokolle generiert.

docker-compose.yml

docker-compose.yml

copy

Dieser Block weist Docker an, den Container aus dem aktuellen Verzeichnis (wo sich Ihre Dockerfile befindet) zu bauen.

Der Container erhält den Namen flask-app. Die Zeile volumes verbindet den lokalen Ordner ./logs mit /logs im Container. Dadurch werden alle von der Anwendung erzeugten Protokolle sowohl im Container als auch auf Ihrem Computer gespeichert.

Die Anwendung läuft im Container auf Port 5000, wird jedoch auf Port 5050 Ihres Rechners abgebildet, sodass Sie sie im Browser unter http://localhost:5050 aufrufen können.

Filebeat

Filebeat fungiert als Agent, der Protokolldateien überwacht und neue Einträge an Logstash sendet.

docker-compose.yml

docker-compose.yml

copy

Filebeat wird aus dem offiziellen 8.15.0-Image ausgeführt. Es läuft als Benutzer root, damit es Berechtigungen zum Lesen von Logdateien hat.

Der Ordner ./logs wird im Nur-Lese-Modus sowie die Konfigurationsdatei filebeat.yml eingebunden. Dies gibt Filebeat an, welche Logs überwacht werden sollen und wohin sie gesendet werden. depends_on stellt sicher, dass Filebeat erst startet, nachdem die Anwendung und Logstash laufen.

Logstash

Logstash empfängt Logs von Filebeat, verarbeitet sie (zum Beispiel durch Parsen von JSON) und leitet sie an Elasticsearch weiter.

docker-compose.yml

docker-compose.yml

copy

Dieser Container verwendet das offizielle Logstash-Image.

Die Konfigurationsdatei logstash.conf wird eingebunden, die Logstash anweist, wie eingehende Logs verarbeitet werden sollen. Der Container startet erst, nachdem Elasticsearch läuft, da ein Ziel für die verarbeiteten Logs benötigt wird.

Port 5044 wird freigegeben, damit Filebeat Daten an Logstash senden kann.

Elasticsearch

Elasticsearch speichert Logs als Dokumente und ermöglicht eine schnelle Suche darin.

docker-compose.yml

docker-compose.yml

copy

Wir verwenden das offizielle Elasticsearch-Image in der Version 8.15.0.

  • discovery.type=single-node gibt an, dass ein Single-Node-Cluster betrieben wird (ausreichend für lokale Tests);
  • xpack.security.enabled=false deaktiviert die Sicherheit, sodass keine Benutzernamen und Passwörter erforderlich sind;
  • ES_JAVA_OPTS begrenzt die Speichernutzung des Java-Prozesses.

Der Dienst ist über Port 9200 unter http://localhost:9200 erreichbar.

Kibana

Kibana ist eine Weboberfläche für Elasticsearch. Sie unterstützt die Visualisierung von Logs und das Erstellen von Dashboards.

docker-compose.yml

docker-compose.yml

copy

Wir verwenden das offizielle Kibana-Image.

Port 5601 wird freigegeben, sodass Sie über Ihren Browser unter http://localhost:5601 auf Kibana zugreifen können.

ELASTICSEARCH_HOSTS verweist Kibana auf unseren Elasticsearch-Container, damit Daten abgerufen und angezeigt werden können.

Finale docker-compose.yml

Hier ist die vollständige Docker Compose-Datei mit allen Diensten in der richtigen Reihenfolge verbunden:

docker-compose.yml

docker-compose.yml

copy

Diese docker-compose.yml startet alle Dienste in der richtigen Reihenfolge. Die Flask-Anwendung erzeugt Protokolle, Filebeat sammelt sie und sendet sie an Logstash, Logstash verarbeitet die Protokolle und leitet sie an Elasticsearch weiter, und Kibana stellt eine Weboberfläche zur Anzeige und Analyse der Daten bereit.

Alles, was noch zu tun bleibt, ist das System auszuführen und zu testen. Dies wird im nächsten Kapitel behandelt.

1. Was ist der Hauptzweck von Docker Compose in diesem Setup?

2. Welcher Dienst ist dafür verantwortlich, Protokolldateien aus der Flask-Anwendung zu sammeln und an Logstash zu senden?

question mark

Was ist der Hauptzweck von Docker Compose in diesem Setup?

Select the correct answer

question mark

Welcher Dienst ist dafür verantwortlich, Protokolldateien aus der Flask-Anwendung zu sammeln und an Logstash zu senden?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 5

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

bookKonfiguration der Docker-Compose-Datei

Swipe um das Menü anzuzeigen

Nachdem alle notwendigen Konfigurationen vorgenommen wurden — für Filebeat, Logstash und die Flask-Anwendung — ist es an der Zeit, diese zusammenzuführen und als ein einziges System auszuführen. Dafür verwenden wir Docker Compose.

Note
Definition

Docker Compose ist ein Tool, mit dem alle benötigten Container in einer einzigen YAML-Datei definiert und mit einem Befehl gestartet werden können.

Anstatt für jeden Dienst einen separaten docker run-Befehl zu schreiben, werden deren Konfigurationen in docker-compose.yml hinterlegt und alles gemeinsam gestartet.

Eine einfache docker-compose.yml-Datei sieht folgendermaßen aus:

docker-compose.yml

docker-compose.yml

copy

Erstellen wir nun schrittweise eine vollständige Datei und erläutern dabei jeden Container.

Flask-Anwendung

Dies ist Ihre Hauptanwendung, die Protokolle generiert.

docker-compose.yml

docker-compose.yml

copy

Dieser Block weist Docker an, den Container aus dem aktuellen Verzeichnis (wo sich Ihre Dockerfile befindet) zu bauen.

Der Container erhält den Namen flask-app. Die Zeile volumes verbindet den lokalen Ordner ./logs mit /logs im Container. Dadurch werden alle von der Anwendung erzeugten Protokolle sowohl im Container als auch auf Ihrem Computer gespeichert.

Die Anwendung läuft im Container auf Port 5000, wird jedoch auf Port 5050 Ihres Rechners abgebildet, sodass Sie sie im Browser unter http://localhost:5050 aufrufen können.

Filebeat

Filebeat fungiert als Agent, der Protokolldateien überwacht und neue Einträge an Logstash sendet.

docker-compose.yml

docker-compose.yml

copy

Filebeat wird aus dem offiziellen 8.15.0-Image ausgeführt. Es läuft als Benutzer root, damit es Berechtigungen zum Lesen von Logdateien hat.

Der Ordner ./logs wird im Nur-Lese-Modus sowie die Konfigurationsdatei filebeat.yml eingebunden. Dies gibt Filebeat an, welche Logs überwacht werden sollen und wohin sie gesendet werden. depends_on stellt sicher, dass Filebeat erst startet, nachdem die Anwendung und Logstash laufen.

Logstash

Logstash empfängt Logs von Filebeat, verarbeitet sie (zum Beispiel durch Parsen von JSON) und leitet sie an Elasticsearch weiter.

docker-compose.yml

docker-compose.yml

copy

Dieser Container verwendet das offizielle Logstash-Image.

Die Konfigurationsdatei logstash.conf wird eingebunden, die Logstash anweist, wie eingehende Logs verarbeitet werden sollen. Der Container startet erst, nachdem Elasticsearch läuft, da ein Ziel für die verarbeiteten Logs benötigt wird.

Port 5044 wird freigegeben, damit Filebeat Daten an Logstash senden kann.

Elasticsearch

Elasticsearch speichert Logs als Dokumente und ermöglicht eine schnelle Suche darin.

docker-compose.yml

docker-compose.yml

copy

Wir verwenden das offizielle Elasticsearch-Image in der Version 8.15.0.

  • discovery.type=single-node gibt an, dass ein Single-Node-Cluster betrieben wird (ausreichend für lokale Tests);
  • xpack.security.enabled=false deaktiviert die Sicherheit, sodass keine Benutzernamen und Passwörter erforderlich sind;
  • ES_JAVA_OPTS begrenzt die Speichernutzung des Java-Prozesses.

Der Dienst ist über Port 9200 unter http://localhost:9200 erreichbar.

Kibana

Kibana ist eine Weboberfläche für Elasticsearch. Sie unterstützt die Visualisierung von Logs und das Erstellen von Dashboards.

docker-compose.yml

docker-compose.yml

copy

Wir verwenden das offizielle Kibana-Image.

Port 5601 wird freigegeben, sodass Sie über Ihren Browser unter http://localhost:5601 auf Kibana zugreifen können.

ELASTICSEARCH_HOSTS verweist Kibana auf unseren Elasticsearch-Container, damit Daten abgerufen und angezeigt werden können.

Finale docker-compose.yml

Hier ist die vollständige Docker Compose-Datei mit allen Diensten in der richtigen Reihenfolge verbunden:

docker-compose.yml

docker-compose.yml

copy

Diese docker-compose.yml startet alle Dienste in der richtigen Reihenfolge. Die Flask-Anwendung erzeugt Protokolle, Filebeat sammelt sie und sendet sie an Logstash, Logstash verarbeitet die Protokolle und leitet sie an Elasticsearch weiter, und Kibana stellt eine Weboberfläche zur Anzeige und Analyse der Daten bereit.

Alles, was noch zu tun bleibt, ist das System auszuführen und zu testen. Dies wird im nächsten Kapitel behandelt.

1. Was ist der Hauptzweck von Docker Compose in diesem Setup?

2. Welcher Dienst ist dafür verantwortlich, Protokolldateien aus der Flask-Anwendung zu sammeln und an Logstash zu senden?

question mark

Was ist der Hauptzweck von Docker Compose in diesem Setup?

Select the correct answer

question mark

Welcher Dienst ist dafür verantwortlich, Protokolldateien aus der Flask-Anwendung zu sammeln und an Logstash zu senden?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 5
some-alt