Vorbereitung einer einfachen Multi-Service-Anwendung
In diesem Schritt bereiten wir eine einfache Multi-Service-Anwendung vor, die wir in diesem Lab verwenden werden, um das Neustarten von Docker-Diensten zu üben. Diese Anwendung besteht aus zwei Diensten: einem Web-Service und einem Datenbank-Service. Wir werden diese Dienste mit einer Docker Compose-Datei definieren.
Zuerst müssen wir Docker Compose installieren. Da es in der LabEx VM-Umgebung nicht vorinstalliert ist, werden wir es herunterladen und installieren.
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Der erste Befehl lädt die Docker Compose-Binärdatei aus dem offiziellen GitHub-Repository herunter und speichert sie unter /usr/local/bin/docker-compose. Die Teile $(uname -s) und $(uname -m) erkennen automatisch Ihr Betriebssystem und die Architektur, um die korrekte Binärdatei herunterzuladen. Der zweite Befehl macht die heruntergeladene Datei ausführbar.
Nun überprüfen wir die Installation, indem wir die Docker Compose-Version anzeigen.
docker-compose --version
Sie sollten eine Ausgabe ähnlich zu Docker Compose version v2.20.2 sehen.
Wechseln Sie nun in das Verzeichnis ~/project, das Ihr Arbeitsverzeichnis für dieses Lab ist.
cd ~/project
Jetzt erstellen wir eine docker-compose.yml-Datei, um unsere Multi-Service-Anwendung zu definieren. Diese Datei spezifiziert die Dienste, ihre Images und alle notwendigen Konfigurationen.
nano docker-compose.yml
Fügen Sie folgenden Inhalt in die docker-compose.yml-Datei ein:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
depends_on:
- db
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: mysecretpassword
In dieser docker-compose.yml-Datei:
version: '3.8' gibt die Docker Compose-Dateiformatversion an.
services: definiert die verschiedenen Dienste unserer Anwendung.
- Der
web-Service verwendet das nginx:latest-Image, bildet Port 80 des Hosts auf Port 80 im Container ab und hängt vom db-Service ab. Das bedeutet, der db-Service wird vor dem web-Service gestartet.
- Der
db-Service verwendet das postgres:latest-Image und setzt die Umgebungsvariable POSTGRES_PASSWORD, die vom PostgreSQL-Image benötigt wird.
Speichern Sie die Datei und beenden Sie den nano-Editor (Drücken Sie Strg + X, dann Y, dann Enter).
Bevor wir die Dienste starten, müssen wir die erforderlichen Docker-Images herunterladen.
docker pull nginx:latest
docker pull postgres:latest
Diese Befehle laden die nginx:latest- und postgres:latest-Images von Docker Hub herunter.
Starten Sie abschließend die in unserer docker-compose.yml-Datei definierten Dienste.
docker-compose up -d
Der Befehl docker-compose up -d erstellt, startet und führt die Dienste im Hintergrund aus (Detached Mode).
Sie können den Status der laufenden Dienste mit folgendem Befehl überprüfen:
docker-compose ps
Sie sollten eine Ausgabe sehen, die anzeigt, dass sowohl der web- als auch der db-Service laufen.