Die Container-Software Docker ist eine sehr effiziente und weitverbreitete Software, die zur Software Virtualisierung eingesetzt wird. Mithilfe des systemeigenen Toolings lässt sich die Funktionalität erweitern. Eines dieser Tools ist Docker Compose. Mit Docker-Compose lassen sich mehrere einzelne Container miteinander verlinken und anschließend gemeinsam orchestrieren. Zudem erlaubt es eine Kommunikation innerhalb der Docker-Compose Container untereinander aufzubauen.
Anwendungsbereiche
Docker Container werden mit dem Ziel exakt eine Anwendung zu betreiben erstellt. Da Docker sehr ressourcenschonend ist lassen sich eine Vielzahl einzelner Docker Container auf einem System starten. Schnell ergeben sich daraus weitere Anforderungen, wie die Kommunikation innerhalb der Contaier oder die Festlegung der Startreihenfolge.
Um diesen Anfoderungen gerecht zu werden, ermöglicht Docker Compose die direkte und automatische Interaktion zwischen beliebig vielen Containern. Ein praktisches Beispiel für einen Anwendungsfall ist eine Web-Anwendung. Diese besteht aus unterschiedlichen Komponenten, die jeweils in einzelnen Docker-Container gestartet werden. Neben dem eigentlichen Webserver sind hier vor allem die Datenbank, ein Mailserver sowie ein Load Balancer zu nennen.
Als zentrales Verwaltungselement in Docker Compose ist die Konfigurationsdatei docker-compose.yml
. Über diese werden alle Docker-Container - die zusammen orchestriert und miteinander interagieren - definiert. Mit der Konfiguration lassen sich die zugehörigen Container bestimmen, deren Ports zur Kommunikation freigeben und Verzeichnisse für die Datenablage festlegen. Auf diese Weise ermöglicht man nicht nur die Interaktion aller gelisteten Container und ihrer Anwendungen, zusätzlich lassen sich diese auch gemeinsam steuern. Der Befehl docker-compose up
startet alle definierten Container gemäß der festgelegten Startreihenfolge. Einzelne Container können weiterhin mit dem Befehl docker start
oder docker stop
verwaltet werden. Der aktuellen Status der betriebenen Docker Compose Container erhält durch den Aufruf des Befehls docker-compose ps
. Alle Container, ihr aktueller Status sowie die Kommunikationsports werden darüber übersichtlich angezeigt.
Docker Compose ist somit ein umfangreiches Werkzeug für Administratoren, um die unterschiedlichen Komponenten einer verteilten Anwendung sicher zu betreiben. Die agile Softwareentwicklung profitiert von den Vorteilen von Docker alsauch Docker-Compose. Entwicklerteams können gleichzeitig an unterschiedlichen Komponenten arbeiten, ohne sich gegenseitig zu behindern. Gleichzeitig bleibt das Gesamtkonstrukt funktionsfähig, da man beispielsweise mit Images getrennt vom Produktionssystem arbeiten und Veränderungen laufend einpflegen kann. So lassen sich selbst komplexe Konstruktionen ohne Downtime verwalten und updaten.
Anforderungen und Vorteile
Die Anforderungen die Docker-Compose an die Hardware stellt, unterscheiden sich nicht von denen des eigentlichen Docker. Gleichzeitig ist Docker Compose deutlich ressourcenschonender als zum Beispiel ein virtuelles System. So lassen sich auf einem Server zahlreiche Container erstellen, von denen einige oder alle mit Compose zusammengefasst werden.
Ein weiterer Vorteil von Docker ist die Möglichkeit des Multi-host-deployments. Auf diesem Weg fassen Sie Container, die sich physikalisch auf unterschiedlichen Systemen befinden, in einem Compose zusammen. Hiervon profitieren Sie vor allem dann, wenn Sie rechenintensive Anwendungen mit Docker betreiben. Diese können Sie auf andere Systeme auslagern und erhalten die Leistungsfähigkeit aller anderen Container. Mit dieser Methode können Sie bei Bedarf auch die Leistung skalieren. Gleiches gilt auch, sofern das Projekt im Laufe der Zeit wächst und neben der Leistung mehr Speicherplatz benötigt. Eine Skalierung ist zu jedem beliebigen Zeitpunkt möglich ohne dabei den Service offline nehmen zu müssen.
Fazit
Die manuelle Verwaltung von Docker Containern wird bei umfangreichen Software Systemen sehr schnell kompliziert und unüberschaubar. Docker-Compose reduziert die Komplexitäten und erlaubt eine kompakte Verwaltung der jeweiligen Container.