Was ist Docker?
Seit seiner Veröffentlichung im Jahr 2012 hat sich Docker zu einer der am schnellsten wachsenden Technologien in der DevOps- und Webentwicklung entwickelt. Wie jede neue Technologie befindet sie sich jedoch noch in der Entwicklung, hat einige Einschränkungen und ist nicht für jedes Projekt geeignet. Dieser Leitfaden bietet einen Überblick über die Vor- und Nachteile von Docker, damit Sie entscheiden können, ob es eine gute Ergänzung für Ihr Projekt wäre.
Eine grundlegendere Einführung in Docker-Konzepte und -Terminologie finden Sie in unserem Handbuch Eine Einführung in Docker.
Vorteile von Docker
-
Reproduzierbarkeit :Ähnlich wie eine Java-Anwendung, die auf jedem Gerät, auf dem eine Java Virtual Machine ausgeführt werden kann, genau gleich ausgeführt wird, ist ein Docker-Container auf jedem System, auf dem Docker ausgeführt werden kann, garantiert identisch. Die genauen Spezifikationen eines Containers werden in einem Dockerfile gespeichert. Durch die Verteilung dieser Datei unter den Teammitgliedern kann eine Organisation garantieren, dass alle Images, die aus derselben Dockerfile erstellt wurden, identisch funktionieren. Darüber hinaus macht es eine konstante und gut dokumentierte Umgebung einfacher, den Überblick über Ihre Anwendung zu behalten und Probleme zu identifizieren.
-
Isolierung :Abhängigkeiten oder Einstellungen innerhalb eines Containers wirken sich nicht auf Installationen oder Konfigurationen auf Ihrem Computer oder auf anderen möglicherweise ausgeführten Containern aus. Durch die Verwendung separater Container für jede Komponente einer Anwendung (z. B. Webserver, Frontend und Datenbank zum Hosten einer Website) können Sie widersprüchliche Abhängigkeiten vermeiden. Sie können auch mehrere Projekte auf einem einzigen Server haben, ohne sich Gedanken über Konflikte auf Ihrem System machen zu müssen.
-
Sicherheit :Mit wichtigen Einschränkungen (siehe unten) kann das Aufteilen der verschiedenen Komponenten einer großen Anwendung in verschiedene Container Sicherheitsvorteile haben:Wenn ein Container kompromittiert wird, bleiben die anderen davon unberührt.
-
Docker-Hub :Für häufige oder einfache Anwendungsfälle, wie z. B. einen LAMP-Stack, bedeutet die Möglichkeit, Images zu speichern und an Docker Hub zu pushen, dass bereits viele gut gepflegte Images verfügbar sind. In der Lage zu sein, schnell ein vorgefertigtes Image abzurufen oder aus einer offiziell verwalteten Docker-Datei zu erstellen, kann diese Art von Einrichtungsprozess extrem schnell und einfach machen.
-
Umweltmanagement :Docker macht es einfach, verschiedene Versionen beispielsweise einer Website mit nginx zu verwalten. Sie können einen separaten Container zum Testen, Entwickeln und Produzieren auf demselben Linode haben und einfach für jeden bereitstellen.
-
Kontinuierliche Integration :Docker funktioniert gut als Teil von Continuous-Integration-Pipelines mit Tools wie Travis, Jenkins und Wercker. Jedes Mal, wenn Ihr Quellcode aktualisiert wird, können diese Tools die neue Version als Docker-Image speichern, es mit einer Versionsnummer versehen und an Docker Hub pushen, um es dann in der Produktion bereitzustellen.
Wann sollte Docker verwendet werden
Wenn Ihre Anwendung in eine oder mehrere der folgenden Kategorien passt, ist Docker möglicherweise gut geeignet:
-
Neue Technologien lernen :Um mit einem neuen Tool zu beginnen, ohne Zeit für Installation und Konfiguration aufzuwenden, bietet Docker eine isolierte und verfügbare Umgebung. Viele Projekte pflegen Docker-Images mit ihren bereits installierten und konfigurierten Anwendungen. Wenn Sie beispielsweise ein verteiltes Tracing-System wie Zipkin ausprobieren möchten, können Sie ein funktionierendes Setup auf localhost erstellen, indem Sie einfach Folgendes ausführen:
sudo docker run -d -p 9411:9411 openzipkin/zipkin
-
Grundlegende Anwendungsfälle :Das Abrufen von Images aus Docker Hub ist auch eine gute Lösung, wenn Ihre Anwendung einfach oder standardmäßig genug ist, um mit einem Standard-Docker-Image zu arbeiten. Fälle wie das Hosten einer Website mit einem LAMP-Stack, die Verwendung eines Reverse-Proxys oder die Einrichtung eines Minecraft-Servers haben oft ein offizielles oder gut unterstütztes Image auf DockerHub verfügbar. Wenn die Standardkonfiguration in diesen Abbildern für Ihre Anforderungen akzeptabel ist, kann das Abrufen des Abbilds viel Zeit sparen, die andernfalls für die Einrichtung Ihrer Umgebung und die Installation der erforderlichen Tools aufgewendet werden müsste.
-
App-Isolierung Hinweis:Wenn Sie mehrere Anwendungen auf einem Server ausführen möchten, vermeiden Sie Probleme mit der Abhängigkeitsverwaltung, indem Sie die Komponenten jeder Anwendung in separaten Containern aufbewahren.
-
Entwicklerteams :Wenn Sie Entwickler haben, die mit unterschiedlichen Setups arbeiten, bietet Docker eine bequeme Möglichkeit, lokale Entwicklungsumgebungen zu haben, die eng mit der Produktionsumgebung übereinstimmen, ohne dass Sie per ssh in eine Remote-Box wechseln müssen.
Wann sollte Docker nicht verwendet werden
Es gibt auch Zeiten, in denen Docker nicht die beste Lösung ist. Hier sind einige Beispiele:
-
Ihre App ist kompliziert und Sie sind/haben keinen Systemadministrator. Für große oder komplizierte Anwendungen reicht es nicht aus, eine vorgefertigte Docker-Datei zu verwenden oder ein vorhandenes Image zu ziehen. Das Erstellen, Bearbeiten und Verwalten der Kommunikation zwischen mehreren Containern auf mehreren Servern ist eine zeitaufwändige Aufgabe.
-
Leistung ist entscheidend für Ihre Anwendung. Docker glänzt im Vergleich zu virtuellen Maschinen in puncto Performance, da Container sich den Host-Kernel teilen und kein vollständiges Betriebssystem emulieren. Docker verursacht jedoch Leistungskosten. Prozesse, die in einem Container ausgeführt werden, sind nicht ganz so schnell wie die, die auf dem nativen Betriebssystem ausgeführt werden. Wenn Sie die bestmögliche Leistung aus Ihrem Server herausholen müssen, sollten Sie Docker möglicherweise vermeiden.
-
Du willst keinen Ärger mit Upgrades. Docker ist eine neue Technologie, die sich noch in der Entwicklung befindet. Um neue Funktionen zu erhalten, müssen Sie die Versionen wahrscheinlich häufig aktualisieren, und die Abwärtskompatibilität mit früheren Versionen ist nicht garantiert.
-
Sicherheit ist entscheidend für Ihre Anwendung. Wie oben erwähnt, bietet das Aufbewahren der verschiedenen Komponenten einer Anwendung in separaten Containern einige Sicherheitsvorteile, da eine Kompromittierung in einem Container den Rest Ihres Systems nicht ohne weiteres beeinträchtigen kann. Der Containerisierungsansatz von Docker wirft jedoch seine eigenen Sicherheitsherausforderungen auf, insbesondere für kompliziertere Anwendungen. Diese Probleme sind lösbar, erfordern jedoch die Aufmerksamkeit eines erfahrenen Sicherheitsingenieurs. (Im Abschnitt „Weitere Informationen“ finden Sie Links zu Diskussionen zu diesen Themen).
-
Mehrere Betriebssysteme. Da Docker-Container das Betriebssystem des Hostcomputers gemeinsam nutzen, müssen Sie virtuelle Maschinen anstelle von Docker verwenden, wenn Sie dieselbe Anwendung auf verschiedenen Betriebssystemen ausführen oder testen möchten.
-
Cluster. Docker-Container auf separaten Servern können mit Docker Swarm zu einem Cluster zusammengefasst werden. Docker ersetzt jedoch keine Bereitstellungs- oder Automatisierungstools wie Ansible, SaltStack und Chef. Darüber hinaus hat Docker kürzlich die Unterstützung für Kubernetes angekündigt, was darauf hindeutet, dass Docker Swarm als eigenständiger Cluster-Manager möglicherweise nicht ausreicht.
Sollten Sie Docker-Container verwenden?
Docker ist zu einer äußerst beliebten Methode zum Konfigurieren, Speichern und Freigeben von Serverumgebungen mithilfe von Containern geworden. Aus diesem Grund kann das Installieren einer Anwendung oder sogar eines großen Stapels oft so einfach sein wie das Ausführen von docker pull
oder docker run
. Die Trennung von Anwendungsfunktionen in verschiedene Container bietet auch Vorteile im Sicherheits- und Abhängigkeitsmanagement.
Docker ist jedoch kein Ersatz für Systems Engineering oder Konfigurationsmanagement, und sein Ansatz hat Nachteile. Entwickler sollten der Versuchung widerstehen, jede von ihnen erstellte Anwendung zu containerisieren, einfach weil Docker eine beliebte und benutzerfreundliche Lösung ist. Wie bei jedem Tool sollten die Anforderungen eines jeden Projekts sorgfältig recherchiert werden, bevor entschieden wird, ob Docker verwendet werden soll.
Weitere Informationen
Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen. Obwohl diese in der Hoffnung bereitgestellt werden, dass sie nützlich sind, beachten Sie bitte, dass wir nicht für die Genauigkeit oder Aktualität extern gehosteter Materialien garantieren können.
- Docker
- Docker-Hub
- Wann Docker nicht verwendet werden sollte
- 5 Sicherheitsbedenken bei der Verwendung von Docker
- 8 Docker-Sicherheitsregeln zum Leben
- Ihre Software ist in Docker-Containern sicherer