Was ist Docker?

Aus xinux.net
Zur Navigation springen Zur Suche springen

Grundlegendes

  • Eine Freie Software zur Isolierung von Anwendungen mit Hilfe von Containervirtualisierung.
  • Es vereinfacht die Bereitstellung von Anwendungen, weil sich Container, die alle nötigen Pakete enthalten, leicht als Dateien transportieren und installieren lassen.
  • Container gewährleisten die Trennung und Verwaltung der auf einem Rechner genutzten Ressourcen.
  • Das umfasst: Code, Laufzeitmodul, Systemwerkzeuge, Systembibliotheken – alles was auf einem Rechner installiert werden kann.
  • Es können mehrere Prozesse isoliert und damit unabhängig voneinander ausgeführt werden.
  • Dies ermöglicht eine einfaches Aktualisierung des Containers ohne andere Container zu gefährden.
  • In der idealen Welt läuft in einem Docker Container nur ein Prozess.
  • Wenn ein weitere Prozess benötigt wird, sollte dieser in ein anderen Container ausgelagert werden.
  • Dies wird aber nicht immer eingehalten.

Grundlagen

  • Es basiert auf Linux-Techniken wie Cgroups und Namespaces, um Container zu realisieren.
  • Anfänglich wurde die LXC-Schnittstelle des Linux-Kernels verwendet
  • Die Docker-Entwickler haben mittlerweile eine eigene Programmierschnittstelle namens libcontainer entwickelt
  • Diese steht auch anderen Projekten zur Verfügung.
  • Als Speicher-Backend verwendet Docker das Overlay-Dateisystem "aufs", ab Version 0.8 unterstützt die Software aber auch "btrfs".
  • Prinzipiell ist Docker auf die Virtualisierung mit Linux ausgerichtet.
  • Es kann allerdings auch mittels Hyper-V oder VirtualBox auf Windows und HyperKit oder VirtualBox auf macOS verwendet werden.
  • Die Ressourcentrennung alleine mit den Docker zugrunde liegenden Techniken wie Namespaces und Cgroups gilt nicht als völlig sicher.
  • Mir Red Hat Unterstützung wurde eine sicherheitsrelevante Kernel-Erweiterung für SELinux implementiert
  • Diese sichert die Container auf der Ebene des Host-Systems zusätzlich ab.

Vorteile

  • Skalibarkeit
  • Isoliert
  • Fertige Systeme
  • Gute Updatefähigkeit

Begriffe

Image

  • Ein Speicherabbild eines Containers.
  • Das Image selbst besteht aus mehreren Layern, die schreibgeschützt sind und somit nicht verändert werden können.
  • Ein Image ist portabel, kann in Repositories gespeichert und mit anderen Nutzern geteilt werden.
  • Aus einem Image können immer mehrere Container gestartet werden.

Container

  • Aktive Instanz eines Images bezeichnet.
  • Er wird also gerade ausgeführt und ist beschäftigt.
  • Sobald der Container kein Programm mehr ausführt, wird der Container automatisch beendet.

Layer

  • Ein Layer ist Teil eines Images und enthält einen Befehl oder eine Datei, die dem Image hinzugefügt wurde.
  • Anhand der Layer kann die ganze Historie des Images nachvollzogen werden.

Dockerfile

  • Eine Textdatei, die mit verschiedenen Befehlen ein Image beschreibt.
  • Diese werden bei der Ausführung abgearbeitet und für jeden Befehl wird ein einzelner Layer angelegt.

Repository

  • Ein Repository ist ein Satz gleichnamiger Images mit verschiedenen Tags, zumeist Versionen.

Registry

  • Eine Registry, wie zum Beispiel Docker Hub oder Artifactory, dient der Verwaltung von Repositories.

libcontainer

  • Eine Schnittstelle zu den Grundfunktionen von Docker.

libswarm

  • Eine Schnittstelle, um Docker-Container zu steuern.

libchan

  • Ermöglicht eine einfache („light weighted“) Kommunikation zwischen Prozessteilen und Prozessen.

Zyklen

Handling

Portforwarding

  • Der Docker Host nimmt die Anfragen auf den Ports entgegen.
  • Er leitet sie zu dem entsprechenden Container.
  • Solange man keinen Reverse Proxy einrichtet kann pro Host Port nur ein Container bedient werden.

Volumes

  • Die Daten in einem Container sind nur solange vorhanden wie der Container existiert.
  • Bei einem Update würden die Daten verloren gehen.
  • Man lagert Daten die die wichtig sind auf das Dateisystem des Docker Host aus.
  • So hat man immer die richtige Datensätze.

Vorgang bei der in Betriebnahme

  • Suchen eines passenden Docker Image
  • Dokumentation lesen
  • Docker Image runter laden und mit entsprechenden Optionen als Container laufen lassen

Was ist zu beachten?

  • Wenn der Container gelöscht oder geupdated wird, gehen die Daten verloren.
  • Wichtiger dynamische Daten sollte man ausserhalb des Containers "legen".
    • Daten werden auf das Hostssystem gelegt, bei Docker Swarm auf ein NFS Share
  • Ports (Schnittstellen) müssen von aussen ereichbar sein.
    • Möglichkeit 1: Portforwarding
    • Möglichkeit 2: Traefik

Begriffe

  • Host

Rechner auf dem die Docker Container laufen.

  • Image

Ein auf einen Verwendungszweck zu geschnittene "Softwarepaket" welches man in der Regel von Docker Hub runter lädt.

  • Container

Wenn man ein Image "startet" wirde es zu einem Container. Man kann ein Image auch 2 man "starten" dann werden 2 Container aus dem selben Image. Vergleichbar mit Variable und Instanz der Progammiersprachen.

  • Volumen

Daten die man ausserhalb des Container legt und die bei einem Container Update erhalten bleiben sollen.

  • Ports

Schnittstellen zu den Prozessen. Hier gibt es den Port im Container und den auf dem Host. Diese müssen miteinander irgendwie "verbunden" werden.