Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Zwei Dienste in einer Compose-Datei

Nach dieser Lektion: Ich kann zwei zusammenarbeitende Dienste in einer Compose-Datei beschreiben.

Lektion, 55 Min.4 BefehleDocker-Grundlagen-Lab: Container, Logs und Neustarts lernen, indem ein defekter Dienst repariert wird

Erst der Cache, dann der Shop

Ein Shop braucht einen Webserver und einen Cache. Jeden von Hand zu starten heißt, lange Befehle zu tippen, in der richtigen Reihenfolge, mit den richtigen Namen.

Beim dritten Mal startet jemand sie falsch herum. Eine einzige Datei kann es einmal sagen, für alle.

Am Ende dieser Lektion

Notiz

Ich kann zwei zusammenarbeitende Dienste in einer Compose-Datei beschreiben.

Schlüsselbegriffe

BegriffWas er bedeutetBeispiel
Dienstein Programm einer Compose-Datei, in einem oder mehreren Containern
Compose-Dateieine Textdatei, die Dienste und ihre Verbindungen beschreibt
Veröffentlichter Porteine Tür des Containers, auf dem Host geöffnet8080:80
Depends oneine Regel: Ein Dienst wartet auf einen anderen
Health-Checkein Test, den Docker wiederholt, um zu sehen, ob ein Dienst antwortet

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Was das Lab nicht kann

Notiz

Das Terminal des Labs hat keinen Befehl docker compose. Das Lab hat seine drei Dienste aus einer Compose-Datei gestartet, die Sie mit Datei bearbeiten öffnen können. Die Datei dieser Lektion haben wir auf unserem Rechner ausgeführt. Sie lesen sie, sehen, was die des Labs getan hat, und prüfen die Startreihenfolge in der Aufgabe.

Eine Datei beschreibt alle Dienste

Unter services: hat jeder Dienst einen Namen und das Image, das er ausführt. Weitere Schlüssel sagen, wie er verbunden ist: seine Türen, seine Einstellungen, das Volume, das er behält, und worauf er wartet.

docker compose up liest die Datei und startet alles in der richtigen Reihenfolge. Hier sind ein Webserver und ein Cache.

Zwei Dienste in einer Compose-Datei

Code: bash
services:
  web:
    image: nginx:1.27-alpine
    ports:
      - "8080:80"
    environment:
      CACHE_HOST: cache
    depends_on:
      cache:
        condition: service_healthy
  cache:
    image: valkey/valkey:8.1-alpine
    healthcheck:
      test: ["CMD", "valkey-cli", "ping"]
      interval: 3s
    volumes:
      - cache-data:/data
volumes:
  cache-data:

Den Cache über seinen Dienstnamen finden

Befehl
docker exec web getent hosts cache

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Sehen, welcher Dienst wann startete

Befehl
docker inspect --format '{{.Name}} {{.State.StartedAt}}' web cache worker

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Beispiel: was jeder Schlüssel tut

SchlüsselWas er tutWas wir sahen
imagesagt, welches Image läuftdas Lab führt nginx und valkey aus
depends_onlässt einen Dienst auf einen anderen wartenim Lab startete worker einige Sekunden nach web und cache
healthchecksagt Docker, wie ein Dienst zu testen istcache antwortet auf valkey-cli ping, ist also healthy
environmentgibt dem Programm eine Einstellungprintenv CACHE_HOST zeigte cache
volumesbehält einen Ordner außerhalb des Containerscache-data bleibt, wenn die Dienste entfernt werden

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein veröffentlichter Port öffnet eine Tür

Im Netz erreichen sich die Dienste über ihren Namen. Ein Besucher auf dem Host braucht eine Tür.

"8080:80" heißt: Port 8080 des Hosts führt zu Port 80 im Container. Die Seite des Hosts steht zuerst. Auf unserem Rechner antwortete curl http://localhost:8080 mit 200. Das web des Labs hat keinen veröffentlichten Port: Nur andere Dienste und die Öffnen-Schaltfläche des Labs erreichen es.

Ein häufiger Irrtum

Warnung

Viele glauben, depends_on warte, bis das andere Programm bereit ist. Allein wartet es nur, bis der andere Container gestartet ist. Geben Sie dem anderen Dienst einen Health-Check und nutzen Sie condition: service_healthy. Dann startet web erst, wenn der Cache antwortet.

Ist der geteilte Ordner in web beschreibbar?

Befehl
docker inspect --format '{{range .Mounts}}{{.Destination}} {{.RW}}{{end}}' web

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Und in worker?

Befehl
docker inspect --format '{{range .Mounts}}{{.Destination}} {{.RW}}{{end}}' worker

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Weiterführend

Fügen Sie der Beispieldatei einen dritten Dienst hinzu: einen worker, der von web und cache abhängt. Schreiben Sie nur seine drei Zeilen: den Namen, ein Image und sein depends_on.

Überlegen Sie dann, in welcher Reihenfolge Compose die drei startet. Die Aufgabe stellt dieselbe Frage für jede Liste.

Über dieses Lab und seinen Quellcode: Docker-Grundlagen-Lab: Container, Logs und Neustarts lernen, indem ein defekter Dienst repariert wird

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.