Zum Inhalt springen

Docker/Getting started

Aus Foxwiki

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
  • Kann gestartet werden und erzeugt damit einen Container
Container Ein laufendes Images (genauer: eine laufende Instanz eines Images)
  • Kann dann auch zusätzliche Daten enthalten

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-slim wird 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 --rm sind aber auch im Container angelegte Daten wieder weg! Mit der Option -it wird 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 des openjdk-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 -w kann 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 Hello die Klasse ausgeführt werden