Automatisierung von Services mit Docker
Bei conventic befassen wir uns schon lange mit Fragestellungen, wie man die Prozesse in der Softwareentwicklung beschleunigen kann, ohne dass die Qualität der entwickelten Software darunter leidet. Eine wichtige Anforderung an das Devops-Team in Entwicklungsprojekten ist heute, die gebauten Artefakte möglichst schnell automatisiert in verschiedenen Stages bis zur Produktion zu installieren. Der Einsatz von Docker ist ein Mittel, diese Anforderung zu erfüllen. Im Gegensatz zur herkömmlichen Virtualisierung von Servern bietet Docker die Virtualisierung und damit Portierbarkeit der Laufzeitumgebung eines Softwareartefaktes. Die Software wird einmal mit der nötigen Laufzeitumgebung gebaut und in einen Container verpackt. Der Container kann dann ohne großen Aufwand in der Zielumgebung implementiert werden. Der Ansatz hat mehrere Vorteile:
- Der Container kann schnell in die Zielumgebung implementiert werden
- Die Zielumgebung wird durch die Installation von Software nicht verändert
- Die fehlerfreie Installation der Software ist sichergestellt
- Die Software kann flexibel skalieren
Ein einmal gebauter Container kann beliebig häufig in verschiedenen Zielumgebungen implementiert werden. Im Gegensatz zum herkömmlichen Weg, Software zu installieren, entfällt dabei die mitunter aufwändige Installation aller Abhängigkeiten. Der Container bringt alle nötigen Abhängigkeiten bereits mit.
Daraus ergibt sich, dass die Zielumgebung durch die Installation der Software nicht verändert wird. In der Vergangenheit war es so, dass auf Anwendungsservern mit der Zeit immer mehr nicht genutzte Softwarepakete angesammelt wurden. Dadurch erhöhte sich die Anfälligkeit für Fehler und die Wartung wurde erschwert. Bei Docker Containern ist es so, dass die für den Betrieb der Software benötigten zusätzlichen Softwarepakete bereits im Container enthalten sind und nicht separat auf dem Zielsystem installiert werden müssen. Das hat zur Folge, dass die Deinstallation der Software keine Artefakte auf dem Zielsystem zurücklässt. Da ein Container bereits alle nötigen Softwarekomponenten enthält, wird die Wahrscheinlichkeit, dass Fehler bei der Installation passieren, erheblich vermindert.
Da ein Container nur so lange zum Starten braucht, wie die enthaltene Software, kann man weitere Instanzen der Software bei Bedarf schnell hochfahren. Die Software kann sowohl mehrfach auf einem Host, als auch verteilt auf mehreren Hosts laufen. Im Gegensatz zu herkömmlichen Cluster-Lösungen, die extrem aufwändig zu installieren waren und einen hohen Wartungsaufwand erforderten, wird die Skalierung und Erzielung von Hochverfügbarkeit extrem vereinfacht.
Unsere Erfahrungen aus Projekten der letzten Jahre zeigen, dass Docker als Technologie mittlerweile ausgereift ist und dem Einsatz in Produktionsumgebungen nichts entgegensteht. Mit dem neuesten Release Docker 1.12 wurde inzwischen auch mit Docker Swarm eine ausgereifte Orchestrierungslösung in die Docker Engine integriert.