skalierbare und portable Applikation. • Keine Gedanken um fehlende Dependencies, Packages oder Libraries. • Applikation läuft in ihrem eigenen isolierten Container: ◦ Testen verschiedener Versionsstände einfach möglich. • Nur der Entwickler selbst kann entscheiden mit welchen Abhängigkeiten seine Software läuft: ◦ MySQL Version, Node.JS Version usw. 6
Containers) ◦ Verfahren zur Virtualisierung. ◦ Ermöglicht mehrere voneinander isoliert laufende Linux-Systeme auf einem Host. ◦ Lange Zeit deswegen nur auf Linux nativ möglich. ◦ Durch cgroup und namespaces gruppierung/ kategorisierung der Prozesse. • Seit v0.9 werden libcontainer als Laufzeitumgebung verwendet ◦ Bringt sämtliche Features (cgroups, Linux namespaces) out-of-the-box mit. ◦ Unabhängig von der LXC implementierung. 9
des selben Images können parallel betrieben werden. • Basic Images werden über Docker-Hub zur Verfügung gestellt. ◦ Nginx, ◦ Node.JS, ◦ MySQL, • Container isoliert von Host und anderen Containern: ◦ Kommunikation nach Außen nur nach Freigabe möglich: ▪ Ports, ▪ Volumes (persistente Daten die auch beim Löschen eines Containers erhalten bleiben), ▪ Netzwerke, 11
Docker-Image der Software erstellt, • Das Image in eine private Docker-Registry gepushed, • ssh auf den Test-Server: ◦ Stoppen und löschen des aktuellen Containers ◦ Pullen des neuen Images von der privaten Docker-Registry ◦ Starten des Containers anhand des neuen Images 16
des Hosts “gebunden” werden. • Innerhalb des docker-compose-Files werden diese Ports definiert. • Diese können allerdings bereits auf dem Host belegt sein. Abhilfe: nginx-proxy -Tool (Reverse Proxy) von Jason Wilder: https://github.com/jwilder/nginx-proxy • Triggert bei jedem starten und stoppen eines Containers eine neue Konfiguration des Nginx an. 17