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ältersollten Sie einige bewährte Methoden befolgen, während Sie mit ihnen arbeiten.
Use Stable Base Image
Dank Docker, Container erstellen Bilder waren noch nie einfacher.
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 führen, die voller Sicherheitslücken sind. 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.
Beispiel: Einfache Node.js und Go, "Hallo Welt" -Apps haben eine Größe von 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.
Keep Container Images Smaller
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 Node.js an. Vom Standardknoten: spätestens zum Knoten: 14-alpine reduziert unsere Basisbildgröße um fast das Zehnfache.
gegen….
Im neuen Docker-DateiDer Container beginnt 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 in den endgültigen Container gepackt, ohne dass alle Compiler und Tools erforderlich sind, um den kompilierten Code zu erstellen.
Die Verwendung kleiner Basisbilder und des Builder-Musters ist eine großartige Möglichkeit, viel kleinere Container ohne viel Arbeit zu erstellen.
Tag your Container Images
Docker-Tagging ist für uns ein außerordentlich 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 Tags 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.
Container Security
Nachfolgend sind die grundlegenden Punkte aufgeführt, um sicherzustellen, dass die Behälter ist sicher.
- Ü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 SicherheitHier können Sie überprüfen, wie sicher ein Docker-Container ist.
One Application Per 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.
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.
Run Stateless Containers
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 z Cloud-SpeicherZum Speichern von Benutzersitzungsinformationen können Sie eine Datenbank mit geringer Latenz wie Redis verwenden und auch eine externe Festplatte für die Speicherung auf Blockebene anschließen.
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 und dann auschecken wie man sichert es.