Docker (Software)

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Docker

Docker (container engine) logo.svg
Basisdaten

Entwickler Docker, Inc.
Aktuelle Version 19.03.5[1]
(14. November 2019)
Betriebssystem Linux[2], Microsoft Windows[3], macOS[4]
Programmiersprache Go[5]
Kategorie Virtualisierung
Lizenz Apache-Lizenz, Version 2.0[6][7], Proprietäre Lizenz
www.docker.com

Docker ist eine Freie Software zur Isolierung von Anwendungen mit Containervirtualisierung.

Docker 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 beinhaltet laut Aussage der Entwickler: Code, Laufzeitmodul, Systemwerkzeuge, Systembibliotheken – alles was auf einem Rechner installiert werden kann.[8]

Grundlagen[Bearbeiten | Quelltext bearbeiten]

Docker können verschiedene Schnittstellen verwenden, um auf Virtualisierungsfunktionen des Linux-Kernels zuzugreifen.

Docker basiert auf Linux-Techniken wie Cgroups und Namespaces, um Container zu realisieren. Während anfänglich noch die LXC-Schnittstelle des Linux-Kernels verwendet wurde, haben die Docker-Entwickler mittlerweile eine eigene Programmierschnittstelle namens libcontainer entwickelt, die auch anderen Projekten zur Verfügung steht. Als Speicher-Backend verwendet Docker das Overlay-Dateisystem AuFS, ab Version 0.8 unterstützt die Software aber auch btrfs.[9]

Prinzipiell ist Docker auf die Virtualisierung mit Linux ausgerichtet. Docker kann allerdings auch mittels Hyper-V (Standard)[10] oder VirtualBox auf Windows und HyperKit[11] oder VirtualBox auf macOS verwendet werden. Da die Ressourcentrennung alleine mit den Docker zugrunde liegenden Techniken wie Namespaces und Cgroups nicht völlig sicher ist, hat die Firma Red Hat Unterstützung für die sicherheitsrelevante Kernel-Erweiterung SELinux implementiert, welche die Container auf der Ebene des Host-Systems zusätzlich absichert.[12]

Begriffe[Bearbeiten | Quelltext bearbeiten]

Image
ein Speicherabbild eines Containers. Das Image selbst besteht aus mehreren Layern, welche 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
als Container wird die aktive Instanz eines Images bezeichnet. Der Container wird also gerade ausgeführt und ist beschäftigt. Sobald der Container kein Programm ausführt oder mit seinem Auftrag fertig ist, wird der Container automatisch beendet.
Layer
ein Layer ist Teil eines Images und enthält einen Befehl oder eine Datei, welche dem Image hinzugefügt wurde. Anhand der Layer kann die ganze Historie des Images nachvollzogen werden.
Dockerfile
eine Textdatei, welche mit verschiedenen Befehlen ein Image beschreibt. Diese werden bei der Ausführung abgearbeitet und für jeden Befehl 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[13]
ermöglicht eine einfache („light weighted“) Kommunikation zwischen Prozessteilen und Prozessen.

Geschichte[Bearbeiten | Quelltext bearbeiten]

Docker wurde im März 2013 von dotCloud veröffentlicht.[14] Der initiale Commit auf dem Git-Repository stammt allerdings vom 19. Januar 2013 und umfasste 1146 Zeilen Code.[15]

Am 29. Oktober 2013 kündigte dotCloud an, sich in Docker Inc. umzubenennen.[16] Anfang August 2014 verkaufte Docker dann seinen Platform-as-a-Service-Dienst dotCloud an die Berliner Firma cloudControl.[17]

Im Laufe des Jahres 2014 gewann Docker so weit an Bekanntheit und Popularität, dass es Bestandteil des Red Hat Enterprise Linux 7.0 wurde.[18] Außerdem wurde es von openSUSE in das Software-Repertoire aufgenommen.[19] Im Juli 2014 schlossen sich die Firmen Microsoft, Red Hat, IBM, Docker, Mesosphere, CoreOS und Saltstack dem Kubernetes-Projekt an, das von Google initiiert worden war. Ziel der Kooperation war es, mit Kubernetes Docker-Container auf sämtlichen privaten, öffentlichen und Hybrid-Cloud-Umgebungen bereitstellen zu können.[20] Ab Version 1.0 verwendet Docker die beiden offiziellen von der IANA zugewiesenen Portnummern 2375 für HTTP- und 2376 für HTTPS-Kommunikation.[21]

Das Unternehmen hinter Docker erhielt im Januar 2014 von mehreren Geldgebern zusammen 15 Millionen US-Dollar an Investitionen.[22] Im April 2015 folgten Investitionen in Höhe von 95 Millionen US-Dollar.[23] Insgesamt belaufen sich die Investitionen in die ursprünglich unter dem Namen dotCloud gegründete Firma damit auf gut 120 Millionen US-Dollar.

Redhat Enterprise Linux 8, das 2019 erschienen ist, enthält Docker nicht mehr, da Redhat und andere Distributoren wie z. B. Suse sich wegen Problemen mit Docker Inc entschieden haben Docker durch podman zu ersetzen[24]

Funktionen[Bearbeiten | Quelltext bearbeiten]

Neben der grundsätzlichen Funktionalität, Container mit virtuellen Betriebssystemen zu erstellen, bietet Docker noch weitere Werkzeuge, um die Arbeit mit Containern zu vereinfachen.

Docker Hub[Bearbeiten | Quelltext bearbeiten]

Docker Hub ist ein Online-Dienst, der eine Registry für Docker-Images und Repositories beinhaltet. Die Registry teilt sich in einen öffentlichen und einen privaten Teil auf. Im öffentlichen Teil kann jeder Nutzer seine selbst erstellten Images hochladen und damit anderen Nutzern zur Verfügung stellen. Außerdem gibt es mittlerweile offizielle Images, z. B. von Linux-Distributoren. Im privaten Teil von Docker Hub können Benutzer ihre Docker-Images hochladen und dadurch einfach z. B. firmenintern verteilen, ohne dass diese damit öffentlich auffindbar sind.[25]

Die Registry-Software wurde von Docker Inc. als Open-Source-Software veröffentlicht, sodass man die Vorteile dieser nun auch nutzen kann, ohne die eigenen Images auf die Server von Docker laden zu müssen.[26]

Mittels von Docker bereitgestellter APIs lassen sich Images auch automatisch aus Repositories von GitHub oder Bitbucket erstellen.[27]

Missbrauch von Docker-Images[Bearbeiten | Quelltext bearbeiten]

Im Sommer 2018 wurde bekannt, dass es Unbekannten gelungen war, Docker-Container mit einer Hintertür zu versehen, die es ihnen ermöglichte, die Kryptowährung Monero zu schürfen. Die 17 infizierten Pakete wurden alle vom Benutzer docker123321 hochgeladen und insgesamt 5 Millionen Mal heruntergeladen. Insgesamt wurden so von den Nutzern 58.000 Euro geschürft.[28]

Erste Meldungen von infizierten Images gab es bereits im Juli 2017,[29] jedoch gab es von Seiten des Docker Hubs keine Reaktion und die Images wurden erst entfernt, als die Sicherheitsfirma Kromtech einen Bericht dazu veröffentlichte.[30]

Datenleck[Bearbeiten | Quelltext bearbeiten]

Wie am 27. April 2019 bekannt wurde, sollen Unbekannte Zugriff auf eine interne Datenbank des Dockerhubs mit vertraulichen Informationen gehabt haben. Betroffen seien rund 190.000 Konten. Neben Usernamen und gehashten Passwörtern waren unter den betroffenen Daten auch Github- und Bitbucket-Tokens für Autobuilds, diese seien bei betroffenen Usern zurückgezogen worden.[31]

Versionsverwaltung[Bearbeiten | Quelltext bearbeiten]

Docker bietet eine eingebaute Versionsverwaltung. Diese erlaubt es, den aktuellen Stand des Containers in ein Image zu sichern, dieses auf das Docker Hub zu laden, die Unterschiede zwischen dem aktuellen Zustand des Containers und dem ursprünglichen Image sowie die sehr grobe Historie eines Images anzuzeigen.[32] Ein Image selbst wird in Schichten eingeteilt, welche als Layer bezeichnet werden. Jeder Layer beschreibt einen Unterschied zu dem vorherigen Layer und zeigt so, welche Programme oder Daten in dem Image hinzugefügt oder entfernt wurden.[33] Die einzelnen Layer sind schreibgeschützt und können nicht manipuliert werden. Der Container selbst schreibt in einem Writeable-Layer und ermöglicht es, dass mehrere Container auf einem Image basieren und sich lediglich der Writeable-Layer unterscheidet.

Auch wenn diese Versionsverwaltung von der Syntax her an Git angelehnt ist und auch mit diesem verglichen wird, unterscheidet sie sich stark von ihrem Vorbild.

Sicherheitsrisiken[Bearbeiten | Quelltext bearbeiten]

Der Docker-Container, und damit auch die in ihm enthaltenen Anwendungen, wird architekturbedingt als root oder in einer eigenen Nutzergruppe ausgeführt, die root gleichgestellt ist und damit uneingeschränkten Zugang zu allen Betriebssystemfunktionen hat. Gelingt es einem Angreifer, in der Virtualisierung Superuser-Rechte zu erlangen, so kann er diese nicht im Host geltend machen, da dieser aufgrund der Linux-Kernel-Funktion der Namensräume nicht vom Container aus erreichbar ist. Dieses Verfahren wird bereits seit 2008 in den Docker-ähnlichen Linux-LXC-Containern erfolgreich verwendet. Entgegen dem Konzept von Virtualisierung (Sandbox) werden die Host-Ressourcen nicht durch Virtualisierung der Hardware, sondern durch das Rechtemanagement geschützt.[34][35][36]

Siehe auch[Bearbeiten | Quelltext bearbeiten]

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Release 19.03.5. 14. November 2019 (abgerufen am 15. November 2019).
  2. docs.docker.com. (abgerufen am 19. August 2016).
  3. docs.docker.com. (abgerufen am 19. August 2016).
  4. docs.docker.com. (abgerufen am 19. August 2016).
  5. thenewstack.io. (abgerufen am 19. August 2016).
  6. github.com.
  7. LICENSE. (englisch, abgerufen am 26. März 2017).
  8. What is Docker? Abgerufen am 28. Februar 2017 (englisch).
  9. Docker 0.8
  10. Microsoft Hyper-V. Abgerufen am 30. Januar 2017 (englisch).
  11. A toolkit for embedding hypervisor capabilities in your application: moby/hyperkit. Moby, 8. November 2019, abgerufen am 8. November 2019.
  12. Docker unterstützt SELinux
  13. Michael Unke: Devops-Trend: Docker-Container. Linux Magazin, 1. September 2014, abgerufen am 6. Februar 2018.
  14. About Us | Docker. (Nicht mehr online verfügbar.) Docker Inc., archiviert vom Original am 18. Juli 2014; abgerufen am 6. September 2014. i Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/www.docker.com
  15. Initial commit. aluzzardi, abgerufen am 24. August 2016.
  16. dotCloud, Inc. is becoming Docker, Inc. dotCloud Inc., abgerufen am 6. September 2014 (englisch).
  17. Julia Schmidt: Platform as a Service: cloudControl übernimmt dotCloud-Geschäft von Docker. Heise Zeitschriften Verlag GmbH & Co. KG, 5. August 2014, abgerufen am 6. September 2014.
  18. Red Hat Enterprise Linux 7 veröffentlicht
  19. Docker-Container für Open Suse 13.1 verfügbar
  20. Kubernetes für Docker
  21. Docker bei IANA
  22. Docker Closes $15 M Series B Funding
  23. 95 Millionen neue US-Dollar für Docker
  24. Red Hat Enterprise Linux 8 freigegeben: Mehr Flexibilität bei Software-Versionen. Heise Zeitschriften Verlag GmbH & Co. KG, 7. Juli 2019, abgerufen am 12. November 2019.
  25. https://docs.docker.com/registry/
  26. https://registry.hub.docker.com/_/registry/
  27. https://docs.docker.com/docker-hub/builds/
  28. 5 Millionen Mal heruntergeladen: Bösartige Docker-Container schürfen Monero. 15. Juni 2018, abgerufen am 27. April 2019.
  29. [dockmylife/memorytest] Report malicious image #1121. 7. August 2017, abgerufen am 27. April 2019 (englisch).
  30. Cryptojacking invades cloud. How modern containerization trend is exploited by attackers. 12. Juni 2018, abgerufen am 27. April 2019 (englisch).
  31. Docker Hub gehackt: 190.000 Nutzerkonten betroffen. 27. April 2019, abgerufen am 27. April 2019.
  32. What is Docker and when to use it. CenturyLink Innovations Lab, abgerufen am 28. Februar 2017.
  33. About images, containers, and storage drivers. Docker Docs, abgerufen am 8. Januar 2018 (englisch).
  34. Docker Sicherheitsempfehlungen, abgerufen am 16. April 2017
  35. Docker - ein Sicherheitsrisiko für Unternehmen?, Computerwoche vom 26. Oktober 2015, abgerufen am 1. Mai 2017
  36. Docker Security, abgerufen am 1. Mai 2017