6 Best Practices für die Verwendung von Containern

Lassen Sie uns über einige der Best Practices sprechen, die Sie bei der Verwendung von Containern befolgen sollten.


Die Containerisierung wird in mehreren Organisationen häufig zum Bereitstellen von Anwendungen in einem Container verwendet. Diese Behälter sind beliebt, weil sie sehr leicht sind. Um das Beste aus dem herauszuholen Behälter, Sie sollten einige bewährte Methoden befolgen, während Sie mit ihnen arbeiten.

Verwenden Sie ein stabiles Basisbild

Dank Docker war das Erstellen von Containerbildern noch nie so einfach.

Geben Sie Ihr Basis-Image an, fügen Sie Ihre Änderungen hinzu und erstellen Sie Ihren Container. Dies ist zwar ideal für den Einstieg, die Verwendung der Standard-Basisimages kann jedoch zu großen Images voller Sicherheitslücken führen. Vermeiden Sie es auch, das Docker-Image “Neueste” zu verwenden, da die Wahrscheinlichkeit groß ist, dass ein Fehler darin vorhanden ist.

Debian oder Ubuntu werden von den meisten Docker-Images als Basis-Image verwendet. Sie sind sehr hilfreich in Bezug auf Kompatibilität und einfaches Onboarding, aber diese Basisimages können Ihrem Container Hunderte von Megabyte zusätzlichen Overhead hinzufügen.

Zum Beispiel, einfache Node.js und Go, “Hallo Welt” Apps sind rund 700 Megabyte. Ihre Anwendung ist wahrscheinlich nur wenige Megabyte groß. All dieser zusätzliche Aufwand ist also Platzverschwendung und ein großartiges Versteck für Sicherheitslücken und Fehler.

Wenn Ihre Programmiersprache oder Ihr Stack keine Option für ein kleines Basis-Image hat, können Sie Ihren Container mit raw erstellen Alpines Linux als Ausgangspunkt. Auf diese Weise haben Sie auch die vollständige Kontrolle darüber, was sich in Ihren Containern befindet.

Halten Sie die Containerbilder kleiner

Die Verwendung kleinerer Basisbilder ist wahrscheinlich der einfachste Weg, um die Größe Ihres Containers zu verringern.

Möglicherweise liefert Ihre Sprache oder Ihr Stapel, den Sie verwenden, ein offizielles Bild, das viel kleiner als das Standardbild ist. Schauen wir uns zum Beispiel den Container von Node.j an. Vom Standardknoten: spätestens zum Knoten: 14-alpine reduziert unsere Basisbildgröße um fast das Zehnfache.

nodejs neuestes Tag - geekflare

vs.….

nodejs alpine tag - geekflare

In der neuen Docker-Datei beginnt der Container mit dem Knoten: alpine image, erstellt ein Verzeichnis für den Code, installiert Abhängigkeiten mit NPM und startet schließlich den Node.js-Server. Mit diesem Update ist der resultierende Container fast zehnmal kleiner.

Sie erstellen den Container mithilfe des Builder-Musters noch leichter. Bei interpretierenden Sprachen wird der Quellcode an einen Interpreter gesendet und dann direkt ausgeführt. Bei einer kompilierten Sprache wird der Quellcode jedoch zuvor in kompilierten Code umgewandelt.

Bei Kompilierungssprachen sind für den Kompilierungsschritt häufig Tools erforderlich, die zum Ausführen des Codes nicht erforderlich sind. Dies bedeutet, dass Sie diese Werkzeuge vollständig aus dem endgültigen Container entfernen können. Dazu können Sie das Builder-Muster verwenden. Der erste Container erstellt den Code, und dann wird der kompilierte Code ohne alle zum Erstellen des kompilierten Codes erforderlichen Compiler und Tools in den endgültigen Container gepackt.

Die Verwendung kleiner Basisbilder und des Builder-Musters ist eine großartige Möglichkeit, viel kleinere Container ohne viel Arbeit zu erstellen.

Kennzeichnen Sie Ihre Container-Bilder

Docker-Tagging ist für uns ein außergewöhnlich leistungsfähiges Tool für die Verwaltung unserer Bilder. Es hilft bei der Verwaltung verschiedener Versionen eines Docker-Images. Unten finden Sie ein Beispiel für die Erstellung eines Docker-Images mit dem Tag-Namen v1.0.1

Docker Build -t Geekflare / Ubuntu: v1.0.1

Nun werden zwei Arten von Tags verwendet: Stabil Stichworte Einzigartig Stichworte.

Verwenden Sie stabile Tags, um das Basisimage des Containers beizubehalten. Vermeiden Sie die Verwendung dieser Tags für Bereitstellungscontainer, da diese Tags häufig aktualisiert werden und dies zu Inkonsistenzen in der Produktionsumgebung führen kann.

Verwenden Sie eindeutige Tags für Bereitstellungen. Mithilfe eindeutiger Tags können Sie Ihren Produktionscluster problemlos auf viele Knoten skalieren. Es vermeidet Inkonsistenzen und Hosts ziehen keine andere Docker-Image-Version.

Außerdem sollten Sie als bewährte Methode die bereitgestellten Image-Tags sperren, indem Sie write-enable auf false setzen. Dies hilft dabei, das bereitgestellte Image nicht versehentlich aus der Registrierung zu entfernen.

Containersicherheit

Nachfolgend sind die grundlegenden Punkte aufgeführt, um sicherzustellen, dass der Container sicher ist.

  • Überprüfen Sie die Authentizität aller Software, die Sie in Ihrem Container installieren
  • Verwenden Sie signierte Docker-Bilder oder Bilder mit einer gültigen Prüfsumme.
  • Stellen Sie sicher, dass die URL HTTPS verwendet, wenn Sie ein Repository eines Drittanbieters verwenden.
  • Fügen Sie die richtigen GPG-Schlüssel hinzu, bevor Sie die Pakete mit Ihrem Paketmanager aktualisieren
  • Führen Sie Ihre Anwendungen niemals als Root aus. Sie sollten immer die Benutzeranweisung in der Docker-Datei verwenden, um sicherzustellen, dass Sie die Berechtigungen Ihres Benutzers löschen.
  • Führen Sie SSH nicht in Ihrem Container aus.
  • Machen Sie das Dateisystem schreibgeschützt.
  • Verwenden Sie Namespaces, um Ihren Cluster aufzuteilen.

Der Docker-Benchmark wurde vom Center for Internet Security (CIS) bereitgestellt, um die Sicherheit eines Docker-Containers zu bewerten. Sie haben ein Open-Source-Skript namens bereitgestellt Docker Bank für Sicherheit, Hiermit können Sie überprüfen, wie sicher ein Docker-Container ist.

Eine Anwendung pro Container

Virtuelle Maschinen können ziemlich gut mehrere Dinge gleichzeitig ausführen, aber wenn es um Container geht, sollten Sie eine einzelne Anwendung in einem Container ausführen. Wenn Sie beispielsweise eine MEAN-Anwendung in einer containerisierten Umgebung ausführen, sollte sie einen Container für MongoDB, einen Container für Express.js, einen Container für Angular und einen Container für Node.js enthalten.

Sogar Container können mehrere Anwendungen parallel ausführen, aber dann können Sie das Containermodell nutzen. Unten finden Sie eine korrekte und falsche Darstellung der ausgeführten Anwendungen in einem Container.

einzelne App ein Container - Geekflare

Die Container haben einen ähnlichen Lebenszyklus wie die Anwendung, die sie ausführen. Wenn der Container gestartet wird, wird die Anwendung gestartet. Wenn ein Container stoppt, stoppt auch die Anwendung.

Führen Sie zustandslose Container aus

Container sind grundsätzlich zustandslos. In diesem Fall werden die persistenten Daten, die Informationen zum Status des Containers enthalten, außerhalb des Containers gespeichert. Dateien können in einem Objektspeicher wie dem Cloud-Speicher gespeichert werden. Um Informationen zu Benutzersitzungen zu speichern, können Sie eine Datenbank mit geringer Latenz wie Redis verwenden und eine externe Festplatte für die Speicherung auf Blockebene anhängen.

Wenn Sie den Speicher außerhalb des Containers aufbewahren, können Sie einen Container problemlos herunterfahren oder zerstören, ohne befürchten zu müssen, Daten zu verlieren.

Wenn Sie zustandslose Container verwenden, ist die Migration oder Skalierung gemäß den Geschäftsanforderungen sehr einfach.

Fazit

Dies sind einige der wichtigsten Vorgehensweisen, die beim Arbeiten mit Containern befolgt werden müssen, wenn Sie eine Docker Production-Umgebung erstellen. Überprüfen Sie dann, wie Sie diese sichern können.

STICHWORTE:

  • Docker

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map