Zum Hauptinhalt springen

Docker

  • hat als Pionier viel zum Erfolg der Containerisierung beigetragen
  • gilt heute als De-facto-Standard für Container

Architektur

Docker-Engine

  • Open-Source-Containerisierungstechnologie

  • zum Erstellen und Containerisieren von Anwendungen

  • Aufbau als Client-Server-Anwendung

  • zentrale Komponente von Docker

  • ist verantwortlich für Erstellen, Ausführen und Verwalten von Containern

  • besteht aus

    • Server: Docker Daemon
    • Client: Docker CLI

Docker-Client

  • Befehlszeilenschnittstelle (CLI)

Aufbau

Lifecycle

Technologie

  • in Programmiersprache GO geschrieben
  • nutzt mehrere Funktionen des Linux-Kernels, um seine Funktionalität bereitzustellen
  • isolierter Arbeitsbereich eines Containers mithilfe von Namespaces
    • Namespaces bilden Isolationsebene
    • jeder Aspekt eines Containers wird in separatem Namespace ausgeführt
    • Zugriff eines Aspekts ist auf diesen Namespace beschränkt

Grundlagen

Image

  • schreibgeschützte Vorlage
  • enthält eine Anwendung mit allen notwendigen Abhängigkeiten
  • Basis, um Container zu erstellen
  • werden oft in Schichten (Layers) aufgebaut, um effizienter wiederverwendet zu werden

Layer

Von StackOverflow - What are Docker image "layers"?:

Basically, a layer, or image layer is a change on an image, or an intermediate image. Every command you specify (FROM, RUN, COPY, etc.) in your Dockerfile causes the previous image to change, thus creating a new layer. You can think of it as staging changes when you're using git: You add a file's change, then another one, then another one...

Repository

  • gleichnamige Images mit verschiedenen Tags

Container

  • laufende Instanz eines Images
  • enthält alles, was die Anwendung zum Laufen benötigt
  • ist isoliert vom restlichen System

Dockerfile

  • Textdatei
  • enthält Befehle, um Docker Images zu erstellen
  • beschreibt, wie die Umgebung eines Containers aufgebaut werden soll

Registry

  • Speicherort für Docker Images
  • Beispiel: Docker Hub
  • aus Registry können Images herunter- (pulled) und hochgeladen (pushed) werden

Docker Engine

siehe Docker-Engine

Docker Volumes

  • in Dockerfile können Verzeichnisse als VOLUME gekennzeichnet werden, die auch nach dem Löschen und Neu-Initialisieren eines Containers erhalten bleiben sollen
  • bei Volume werden Daten nicht im Container, sondern ausserhalb auf dem Host-Computer gespeichert
  • bei Neu-Initialisierung eines Containers bleiben Daten erhalten

unbenannte Volumes - anonymous volumes

  • Standard
  • Daten werden in zufällig benanntem Unterverzeichnis von /var/lib/docker/volumes des Host-Computers gespeichert

benannte Volumes - named volumes

  • Benennung von Volumes beim Erstellen eines Containers
  • -v volumename:containerverzeichnis
  • docker run -d --name mariadb-test -v myvolume:/var/lib/mysql mariadb
  • Name für Unterverzeichnis kann angegeben werden

Verhalten: Wenn das Volume noch nicht existiert, werden die Daten des erstellen Containers darin abgelegt. Existiert das Volume schon, werden die Daten des Volumes im Container verwendet.

Volumes in eigenen Verzeichnissen - mounted volumes

  • Angeben eines Verzeichnisses für Volume
  • -v hostverzeichnis:containerverzeichnis
  • Beispiel
    docker run -d -v /home/user/databases:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=geheim mariadb

Verhalten: Der Container verwendet immer die Daten des Volumes und kopiert keine Daten des Containers in das Volume, wenn das Volume noch leer ist. Somit muss das Volume-Verzeichnis selbst mit den benötigten Start-Daten befüllt werden.