Auf meinem Laptop lief es noch
Eine Entwicklerin baut eine kleine Shop-Anwendung auf ihrem Laptop. Sie läuft einwandfrei. Auf dem Firmenserver bricht sie ab, weil dort eine Bibliothek älter ist.
Niemand hat etwas falsch gemacht. Die beiden Rechner waren nur verschieden. Ein Container liefert die Anwendung samt allem, was sie braucht. So läuft sie überall gleich.
Am Ende dieser Lektion
Notiz
Ich kann eine Anwendung in einem Container starten und mir ihr Inneres ansehen.
Schlüsselbegriffe
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Image | ein schreibgeschütztes Paket mit einem Programm und allem, was es braucht | |
| Container | eine laufende Kopie eines Images mit eigenen Dateien und Prozessen | |
| Tag | der Teil nach dem Doppelpunkt, der die Version eines Images benennt | 1.27-alpine |
| Port | eine Nummer, unter der ein Programm auf Verbindungen wartet | 80 |
| Volume | ein Ordner außerhalb des Containers, der erhalten bleibt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Image ist das Rezept, Container das Gericht
Ein Image ist ein Paket. Es enthält ein Programm, die nötigen Dateien und einen Hinweis, wie es startet. Ein Image ändert sich nie.
Ein Container entsteht, wenn Sie ein Image starten. Aus einem Image können Sie viele Container starten, so wie ein Rezept viele Gerichte ergibt.
Ihr Lab hat drei Container. Listen Sie sie mit dem folgenden Befehl auf.
Alle Container auflisten
docker ps -aHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Beispiel: eine Zeile lesen
| Spalte | Was sie verrät | In Ihrem Lab |
|---|---|---|
| IMAGE | aus welchem Image der Container gestartet wurde | web nutzt nginx, cache nutzt valkey |
| STATUS | läuft, gestoppt oder angeschlagen | Up, Exited oder healthy |
| PORTS | die Ports, an denen das Programm auf Verbindungen wartet | 80/tcp bei web |
| NAMES | der Name, den Sie in anderen Befehlen tippen | web, cache, worker |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Container hat seine eigene Sicht
Im Container sieht das Programm nur seine eigenen Dateien und seine eigene Prozessliste. Die Dateien der anderen Container bleiben ihm verborgen.
Mit docker exec führen Sie einen Befehl in einem laufenden Container aus. Die nächsten drei Befehle sehen in web hinein, den Container, der eine Webseite ausliefert.
Prozesse in web auflisten
docker exec web psHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den Server nach seiner Version fragen
docker exec web nginx -vHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den Ordner der Webseite auflisten
docker exec web ls /usr/share/nginx/htmlHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Irrtum
Warnung
Viele halten einen Container für eine kleine virtuelle Maschine. Das stimmt nicht. Ein Container ist ein gewöhnlicher Prozess des Hosts, dem eigene Dateien und eine eigene Prozessliste gezeigt werden. Er teilt sich den Kernel mit dem Host. Brauchen Sie ein anderes Betriebssystem, wählen Sie eine virtuelle Maschine.
Woher stammen die Dateien von web?
docker exec web head -n 1 /etc/os-releaseHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
web nach seinem Kernel fragen
docker exec web uname -rHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ihr eigenes Terminal dasselbe fragen
uname -rHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ports lassen Besuch ein, Volumes bewahren Dateien
Ein Webserver wartet an Port 80. Andere Container im Netz des Labs erreichen ihn über seinen Namen web.
Die eigenen Dateien eines Containers halten nur so lange wie er selbst. Ersetzen Sie den Container oder stoppen Sie das Lab, sind sie weg.
Ein Volume ist ein Ordner außerhalb des Containers. Das Lab hält einen unter /settings.
Den Webport über seinen Namen besuchen
curl -s -o /dev/null -w "%{http_code}\n" http://webHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Datei im Container anlegen
docker exec web touch /tmp/notiz.txtHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Sie dort ansehen
docker exec web ls /tmpHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Volume ansehen, ohne es zu ändern
docker exec web ls /settingsHier 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
Zählen Sie die Zeilen nginx: worker process in der Ausgabe von docker exec web ps. Führen Sie dann docker exec web nproc aus. Der Befehl nennt die Zahl der Prozessoren, die der Container sieht.
Vergleichen Sie die beiden Zahlen. Erklären Sie, warum nginx wohl so viele Worker startet und wem diese Prozessoren gehören.