Docker/Getting started
Getting started
- DockerHub
Fertige Images
Image download
docker pull <IMAGE>
Image starten
docker run <IMAGE>
Begriffe
| Begriff | Beschreibung |
|---|---|
| Docker-File | Beschreibungsdatei, wie Docker ein Image erzeugen soll |
| Image | Enthält die Dinge, die lt.. dem Docker-File in das Image gepackt werden sollen
|
| Container | Ein laufendes Images (genauer: eine laufende Instanz eines Images)
|
Beispiele
docker pull debian:stable-slim docker run --rm -it debian:stable-slim /bin/sh
debian ist ein fertiges Images, welches über DockerHub bereit gestellt wird
- Mit dem Postfix
stable-slimwird eine bestimmte Version angesprochen
Mit docker run debian:stable-slim startet man das Image, es wird ein Container erzeugt
- Dieser enthält den aktuellen Datenstand, d. h. wenn man im Image eine Datei anlegt, wäre diese dann im Container enthalten
Mit der Option --rm wird der Container nach Beendigung automatisch wieder gelöscht
- Da jeder Aufruf von
docker run <IMAGE>einen neuen Container erzeugt, würden sich sonst recht schnell viele Container auf dem Dateisystem des Hosts ansammeln, die man dann manuell aufräumen müsste - Man kann aber einen beendeten Container auch erneut laufen lassen ... (vgl. Dokumentation von
docker) - Mit der Option
--rmsind aber auch im Container angelegte Daten wieder weg! Mit der Option-itwird der Container interaktiv gestartet und man landet in einer Shell
Bei der Definition eines Images kann ein "Entry Point" definiert werden, d. h. ein Programm, welches automatisch beim Start des Container ausgeführt wird
- Häufig erlauben Images aber auch, beim Start ein bestimmtes auszuführendes Programm anzugeben
Im obigen Beispiel ist das /bin/sh, also eine Shell
docker pull openjdk:latest docker run --rm -v "$PWD":/data -w /data openjdk:latest javac Hello.java docker run --rm -v "$PWD":/data -w /data openjdk:latest java Hello
Auch für Java gibt es vordefinierte Images mit einem JDK
- Das Tag "
latest" zeigt dabei auf die letzte stabile Version desopenjdk-Images. Üblicherweise wird "latest" von den Entwicklern immer wieder weiter geschoben, d. h. auch bei anderen Images gibt es ein "latest"-Tag - Gleichzeitig ist es die Default-Einstellung für die Docker-Befehle, d. h. es kann auch weggelassen werden:
docker run openjdk:latest
und
docker run openjdk
sind gleichwertig
Alternativ kann man hier auch hier wieder eine konkrete Version angeben
Über die Option -v wird ein Ordner auf dem Host (hier durch "$PWD" dynamisch ermittelt) in den Container eingebunden ("gemountet"), hier auf den Ordner /data
- Dort sind dann die Dateien sichtbar, die im Ordner
"$PWD"enthalten sind. Über die Option-wkann ein Arbeitsverzeichnis definiert werden
Mit javac Hello.java wird javac im Container aufgerufen auf der Datei /data/Hello.java im Container, d. h. die Datei Hello.java, die im aktuellen Ordner des Hosts liegt (und in den Container gemountet wurde)
- Das Ergebnis (
Hello.class) wird ebenfalls in den Ordner/data/im Container geschrieben und erscheint dann im Arbeitsverzeichnis auf dem Host - Analog kann dann mit
java Hellodie Klasse ausgeführt werden