Docker ist ein Virtualisierungs-Tool, mit dem sich Betriebsystemumgebungen und dort lauffähige Software in Container verpackt werden kann und auch auf betriebsystemfremden Umgebungen ausgeführt werden kann.
Die Vorteile von Docker:
– mit Docker können sehr einfach Container ausgetauscht werden, dies hilft bei der Arbeit an gemeinsamen Projekten weiter, wenn Infrastruktur angeapsst werden muss, erst auf der dev Umgebung, dann auf der Test Umgebung usw. So können Test mit der passenden Umgebung ausgeführt werden, man hat somit eine dynamische Testumgebung, anstelle einer statischen
– performance Vorteile gegenüber virtuellen Maschinen
– die Container machen es einfacher, die Entwicklungsumgebung bei Softwareprojekten allen Teilnehmern schnell und einfach zur Verfügung zu stellen. Dadurch wird das Onboarding einfacher und Abhängigkeiten werden vermieden, wie z.B. ein Development Server, auf dem alle arbeiten, der aber nicht verändert werden darf
– auch verteilte Systeme könnne so endlich im Development und Testing Umgebung simuliert und getestet werden. Dadurch könnne Fehler früher gefunden und vermieden werden. Wer kennt das nicht, das Produktivsystem besteht aus mehreren Nodes hinter einem Loadbalancer mit Master/Slave Datenbank, aber das Dev/Test/Staging System hat nur eine Node ohne Slave.
– Plattformunabhängikeit: Man kann auf seinem MAC Windows Applikationen laufen lassen im Container ohne Probleme
Docker besteht aus mehreren Komponenten:
Docker Begrifflichkeiten
Docker Engine
Die docker
(Engine) ist eine CLI-Applikation mit der man mit dem Docker Daemon auf den Docker Hosts steuern kann.
Docker Host
Auf dem Docker Host laufen die Docker Container. Diese werden über den Docker Daemon orchestriert.
Docker Client
Auf dem Client läuft die Docker Engine. Von hier aus kann ein Docker Host gesteuert werden.
Docker Daemon
Der Docker Damon läuft auf dem Docker Host und orchestriert die Docker Container. Der Daemon kann über die CLI mit dockerd gesteuert werden. Im Regelfall wird der Daemon jedoch mit dem Docker Client gesteuert. Für die Steuerung existiert eine REST API und ein SDK in Go und Python.
Docker Registry
Auf der Docker Registry werden Docker Images gehostet. Beispielsweise sind Docker Hub und die Docker Cloud öffentliche Registries. Private unternehmseigene Registries könnnen sehr einfach selbst aufgesetzt werden.
Image
Ein Image ist ein Packet, das alles beinhaltet um eine Software zu betreiben, wie Code, Runtime, Bibliotheken und Konfigurationen. Docker Images können aus dem Docker Hub geladen und erweitert werden und selbsterstellt werden mit dem docker build
Befehl.
Container
Ein Container ist eine laufende Instanz eines Images. Sie läuft isoliert auf dem Host-System und kann über Host Ports und Dateien zugreifen bei entsprechender Konfiguration. Container lassen Applikationen nativ auf dem Host Kernel ausführen und benötigen nur soviel Systemressourcen wie gerade benötigt, da sie in einem eigenen Porzess laufen auf dem Host Prozess. Virtuelle Maschinen dagegen haben nur eine virtuellen Zugriff auf die Host Resourcen.
Docker Toolbox
Die Docker Toolbox besteht aus der Docker Engine und verschiedenen Docker Utilities (Docker Compose, Docker Machine, Kitematic). Die Toolbox benutzt eine virtuelle Maschine, die mit Virtual Box ausgeführt wird, als Docker Host. Diese virtuelle Maschine ist boot2docker. Sie ist für MAC und PC erhätlich.
Docker Machine
Die Docker Machine wird meist lokal installiert und damit können verschiedene Docker Hosts administriert werden. Die Docker Engine kann damit auf den Hosts installiert werden. ALs Hosts kommen auch Cloud Provider wie Azure, AWs oder DigitalOcean in Frage,
Boot2Docker
Boot2docker ist eine extrem leichtgewichtige (27MB) Linux Distribution basierend auf Tiny Core Linux und kann direkt im RAM ausgeführt werden. Das Linux System dient als Docker Host und beinhaltet den Docker Daemon. Boot2Docker wird z.B. auf OS X eingesetzt, weil der Docker Daemon dort nicht läuft.
Docker Compose
Kitematic
Kitematic ist eine GUI um Container zu starten und zu verwalten, Teil der Docker Toolbox.
Docker Cloud
Die Docker Cloud dient zum Deployment und zum Testen von mit Docker entwickelten Applikationen.