Was ist Docker?: Unterschied zwischen den Versionen

Aus xinux.net
Zur Navigation springen Zur Suche springen
 
(12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
=Grundlegendes=
 
=Grundlegendes=
Docker ist eine '''Containervirtualisierung'''. Durch Docker 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.  
+
*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.
 +
{{#drawio:docker-vs-vms}}
  
[[Datei:docker-container-zu-linux-01.png]]
+
=Grundlagen=
 
+
*Es basiert auf Linux-Techniken wie Cgroups und Namespaces, um Container zu realisieren.
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.
+
*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=
 
=Vorteile=
Zeile 11: Zeile 28:
 
*Fertige Systeme
 
*Fertige Systeme
 
*Gute Updatefähigkeit
 
*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=
 +
{{#drawio:docker-1}}
  
=Port handling=
+
=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.
 +
{{#drawio:docker-2}}
  
*Docker
+
==Volumes==
[[Datei:docker-ports.png]]
+
*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.
 +
{{#drawio:docker-3}}
  
 
=Vorgang bei der in Betriebnahme=
 
=Vorgang bei der in Betriebnahme=

Aktuelle Version vom 23. März 2022, 17:46 Uhr

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.