Container Lohnt sich die Kopfschmerzen?

0
38

Container sind ein Unix-Konzept, das es Anwendungen ermöglicht werden verpackt, mit allen notwendigen Abhängigkeiten in einem einfach-zu-laufen-Bild. Das hat durchschlagenden Vorteile für eine DevOps-Workflows, aber es lohnt sich den zusätzlichen Aufwand?

Container Synchronisieren Dev und Prod-Umgebungen

Mit Containern, die ganze Idee ist, dass Sie Verpacken alles, was Sie ausführen müssen, um Ihren code in eine leicht verteilbare Bild. Dies bedeutet, dass alle, die erforderlich ist, um das Bild, um es herunterzuladen, und führen Sie docker laufen.

Vorbei sind die Zeiten von “es funktioniert nicht auf meinem Rechner.” Mit Containern—zur Verfügung gestellt, jeder hat das Andockfenster richtig installiert und weiß, wie es zu verwenden—die container laufen soll, sehr nahe an genau das gleiche auf Ihrem Computer wie jeder elses.

Darüber hinaus gilt dies auch für Ihre Produktionsumgebung so gut. Sie könnten ermöglichen, ein paar dev-features in Entwicklung baut, aber für die meisten Teil, der Behälter wird in der Lage sein, geschickt zu werden, um Ihre Produktions-Server. Man sollte nicht die Erfahrung, die viele Probleme mit hosting-Container.

Behälter Ermöglichen Eine Effiziente Skalierung

Becaue es ist so einfach zu laufen, ein container, es gibt eine Menge von services, die ausgeführt wird, Sie für Sie. Diese sind in der Regel bezeichnet als Orchestrierungs-tools—tools, verwalten, ausführen mehrerer Instanzen von Containern auf vielen Servern.

AWS hat Ihre Elastische Container-Service, das die Verwaltung läuft dein Behälter über eine Flotte von EC2-Instanzen oder auf Ihre eigenen Fargate-service. Kubernetes ist open source, und viele cloud-Anbieter bieten Integrationen verwenden.

Jede Orchestrierung service wird in der Lage sein zu überwachen, die Gesundheit Ihrer Instanzen und Trudeln bis neue, wenn der Verkehr hoch ist. Dies ermöglicht eine effiziente Skalierung, die sparen Sie eine Menge Geld auf hosting-Kosten (bis zu 90% auf AWS mit Auto Scaling und Spot-Instances), und bedeutet, dass Sie don ‘ T haben zu viel sorgen darüber, stärker als Ihre Infrastruktur.

Plus, Behälter nicht erleben, den gleichen performance-Einbußen kommt mit virtuellen Maschinen, da Sie nicht haben ausführen eines Gast-OS für jede app. Dies macht das container-hosting billiger im Allgemeinen, und viel effizienter.

Und all dies wird ermöglicht aufgrund der Art der Behälter, ohne zusätzliche Arbeit erforderlich. Sie können das gleiche tun, was auf AWS mithilfe von benutzerdefinierten AMIs, aber Sie sind viel schwieriger zu verwalten als Container, und Sie tun viel von der gleichen Arbeit.

Container-Version Steuern Sie Ihren SysAdmin

Vielleicht die geilste Folge von Containern ist, dass Sie bringen alle Ihre server-Konfiguration aus Ihrem SysAdmin ‘ s Kopf und auf git, wo es sein kann, verwaltet und nachverfolgt werden. Weil jedes neue Paket, die Konfigurationsdatei, das Installations-Skript, und Abhängigkeit sich in der build-Ordner für den container, ist es trivial, um es Haken bis zu-source-control.

Container integrieren sich besonders gut mit der operativen Seite des DevOps-Workflows. Sie ermöglichen die Verwendung der gleichen version-management und Test-Systeme Sie haben, um die Verwaltung Ihrer server-Architektur. Und weil jeder ist in sync mit der gleichen Umgebung zu entwickeln, zu bauen und zu testen, sollte es sehr reibungslos fließen.

Plus, Docker funktioniert gut mit continuous integration Systemen. Docker-builds sind einfach zu automatisieren, vor allem, wenn Sie mithilfe von Azure-Pipelines. Schiebt ein Docker-image, um Ihre Flotte von Servern ist so einfach wie die Aktualisierung des Bildes im repository. Sie können sogar implementieren ein neuen container, die auf einer Teilmenge von Servern zu überwachen, seine Gesundheit vor der Bereitstellung über die gesamte Flotte, etwas, das wäre nicht trivial zu implementieren, ohne Container.

Der Nachteil: Der Kopfschmerz Ist Real

Lassen Sie uns real sein—die Container sind sicherlich die elegantere Lösung, aber Sie sind viel schwieriger einzurichten und die Arbeit mit, im Vergleich zu nur feuern eine neue Linux-box, und dafür eine Stunde Sie die software installieren. Jeder hat getan das letztere, sondern das erstere nimmt viel mehr Zeit in Investitionen insgesamt. (Obwohl, wenn Sie eine Tonne von Servern, Andockfenster muss nur einmal konfiguriert werden.)

Wenn Ihre Aufgabe ist nicht besonders kompliziert, oder Sie haben nicht viel Nachfrage, zu implementieren, mit Containern kann zu viel des guten. Es gibt keinen wirklichen Grund, containerize nginx und Knoten, wenn Sie nur es läuft auf eine Instanz.

Und während die Container machen es leichter zu verwalten, all die Abhängigkeiten, die möglicherweise mit der Ausführung Ihrer app, es ist auch viel mehr ein Schmerz zu laufen Docker und binden von ports, wenn Sie wollen, testen Sie Ihre app, im Vergleich zu nur npm start oder etwas ähnliches in Ihrem Projekt-Verzeichnis. Dies kann definitiv entschärft werden, mit den startup-Skripts, aber wenn du auf macOS oder Windows, Sie läuft noch eine ganze VM nur zu laden, bis Sie Ihre web-app.

Am Ende des Tages, wenn Sie ein fan von Docker und seine Konzepte, nichts hindert Sie nutzen es für Ihre persönliche Projekte. Aber die Vorteile von Docker nur wirklich beginnen, überwiegen die Kopfschmerzen sobald Sie in Betrieb sind in einem größeren team. In einer team-Umgebung, bringen alles rund um Ihre app in Ihrer version-management-Systeme und DevOps-workflow hilft bei der Produktion glatt fließen.