Die zentralen Thesen
- Verwenden Sie offizielle Docker-Images für mehr Sicherheit und Leistung. Das Erstellen eigener Images kann zu einer falschen Konfiguration führen und mehr Zeit in Anspruch nehmen.
- Verwenden Sie bestimmte Versionen von Docker-Images, um unvorhersehbares Verhalten und Konflikte mit Abhängigkeiten zu vermeiden. Ziehen und erstellen Sie mit Bildern einer bestimmten Version.
- Scannen Sie Docker-Images mit dem Befehl „docker scan“ auf Sicherheitslücken. Stellen Sie fest, ob ein Bild für Ihre Anwendung sicher genug ist.
Docker ist die beliebteste Containerisierungssoftware, aber nicht jeder nutzt sie effizient. Wenn Sie die Best Practices von Docker nicht befolgen, können Ihre Apps Sicherheits- oder Leistungsproblemen ausgesetzt sein.
Hier sind einige Best Practices, die Sie übernehmen können, um Docker-Funktionen einfallsreich zu nutzen. Diese Maßnahmen verbessern die Sicherheit und stellen sicher, dass Sie wartbare Docker-Dateien erstellen.
1. Verwenden Sie offizielle Docker-Images
Beim Containerisieren Ihrer Anwendung müssen Sie ein Docker-Image verwenden. Sie können ein Image mit benutzerdefinierter Konfiguration erstellen oder die offiziellen Images von Docker verwenden.
Um Ihre eigenen Images zu erstellen, müssen Sie die gesamte Konfiguration selbst durchführen. Um beispielsweise ein Image für eine node.js-Anwendung zu erstellen, müssen Sie node.js und seine Abhängigkeiten herunterladen. Der Vorgang ist zeitaufwändig und führt möglicherweise nicht zu einer korrekten Konfiguration.
Docker empfiehlt die Verwendung eines offiziellen node.js-Images, das alle korrekten Abhängigkeiten enthält. Docker-Images verfügen über bessere Sicherheitsmaßnahmen, sind leichtgewichtig und werden für verschiedene Umgebungen getestet. Die offiziellen Bilder finden Sie auf Offizielle Bilder von Docker Seite.
2. Verwenden Sie bestimmte Versionen von Docker Image
Wenn Sie ein offizielles Image abrufen, ist es normalerweise das mit dem neuesten Tag, das die neueste aktualisierte Version dieses Images darstellt. Jedes Mal, wenn Sie aus diesem Image einen Container erstellen, handelt es sich um eine andere Version des letzten Containers.
Das Erstellen mit verschiedenen Docker-Image-Versionen kann zu unvorhersehbarem Verhalten in Ihrer Anwendung führen. Die Versionen können mit anderen Abhängigkeiten in Konflikt geraten und schließlich dazu führen, dass Ihre App fehlschlägt.
Docker empfiehlt, dass Sie Images einer bestimmten Version abrufen und erstellen. Offizielle Bilder verfügen außerdem über eine Dokumentation und decken die häufigsten Anwendungsfälle ab.
Zum Beispiel statt Docker Pull Alpine, verwenden Docker Pull Alpine: 3.18.3. Docker ruft diese bestimmte Version ab. Sie können es dann in aufeinanderfolgenden Builds verwenden und so Fehler in Ihrer Anwendung reduzieren. Die jeweiligen Versionen der Images finden Sie auf der offiziellen Docker-Image-Seite unter Unterstützte Tags und entsprechende Dockerfile-Links:
3. Scannen Sie Bilder auf Sicherheitslücken
Wie können Sie feststellen, dass ein Image, mit dem Sie erstellen möchten, keine Sicherheitslücken aufweist? Durch Scannen. Sie können Docker-Images mit dem Befehl „docker scan“ scannen. Die Syntax lautet wie folgt:
docker scan [IMAGE]
Um ein Bild zu scannen, müssen Sie sich zunächst bei Docker anmelden.
docker login
Scannen Sie dann das spezifische Bild, das Sie überprüfen möchten:
docker scan ubuntu: latest
Ein Tool namens Synchronisieren scannt das Bild und listet alle Schwachstellen entsprechend ihrem Schweregrad auf. Sie können die Art der Sicherheitslücke und Links zu Informationen darüber sehen, einschließlich der Anleitung zur Behebung. Anhand des Scans können Sie erkennen, ob das Bild sicher genug für Ihre Anwendung ist.
4. Verwenden Sie kleine Docker-Images
Wenn Sie ein Docker-Image abrufen, werden alle Systemdienstprogramme mitgeliefert. Dadurch wird die Bildgröße mit Werkzeugen erhöht, die Sie nicht benötigen.
Große Docker-Images beanspruchen Speicherplatz und können die Laufzeit von Containern verlangsamen. Außerdem besteht bei ihnen ein größeres Risiko für Sicherheitslücken.
Du kannst Reduzieren Sie die Größe von Docker-Images mithilfe von Alpine-Images. Alpenbilder sind leichtgewichtig und werden nur mit den notwendigen Werkzeugen geliefert. Sie reduzieren den Speicherplatz und sorgen dafür, dass Ihre Anwendung schneller und effizienter läuft.
Für die meisten offiziellen Bilder finden Sie auf Docker eine Alpine-Version. Hier ist ein Beispiel für Alpine-Versionen für PostgreSQL:
5. Optimieren Sie das Caching von Bildebenen
Jeder Befehl in einer Docker-Datei stellt eine Ebene auf dem Bild dar. Die Schichten verfügen über unterschiedliche Dienstprogramme und führen verschiedene Funktionen aus. Wenn Sie sich die offiziellen Bilder auf Docker Hub ansehen, sehen Sie die Anweisungen, mit denen sie erstellt wurden.
Die Docker-Datei enthält alles, was Sie zum Erstellen des Images benötigen. Das ist einer der Gründe, warum viele Entwickler bevorzugen Docker gegenüber virtuellen Maschinen.
Hier ist die Struktur eines Beispiel-Alpenbildes:
Wenn Sie Ihre Anwendung auf der Grundlage eines Bildes erstellen, fügen Sie dem Bild weitere Ebenen hinzu. Docker führt Anweisungen für eine Docker-Datei von oben nach unten aus, und wenn sich eine Ebene ändert, muss Docker die nachfolgenden Ebenen neu erstellen.
Die beste Vorgehensweise besteht darin, Ihre Docker-Datei von den Dateien, die sich am wenigsten ändern, zu den Dateien zu ordnen, die sich am häufigsten ändern. Die Anweisungen, die sich nicht ändern, wie z. B. die Installation, können oben in der Datei stehen.
Wenn Sie eine Datei ändern, baut Docker die geänderten Dateien auf und speichert die darüber liegenden unveränderten Dateien zwischen. Daher läuft der Prozess schneller.
Schauen Sie sich das im Bild oben dargestellte Beispiel an. Wenn sich die Anwendungsdateien ändern, erstellt Docker von dort aus; Es ist nicht erforderlich, die NPM-Pakete erneut zu installieren.
Wenn Sie aus dem Image erstellen, läuft der Prozess schneller ab, als alle anderen Ebenen neu zu erstellen. Caching beschleunigt auch das Abrufen und Pushen von Bildern vom Docker Hub.
7. Verwenden Sie eine .dockerignore-Datei
Wenn Sie ein Image mithilfe einer Docker-Datei erstellen, möchten Sie möglicherweise bestimmte Informationen privat halten. Einige Dateien und Ordner sind möglicherweise Teil des Projekts, Sie möchten sie jedoch nicht in den Erstellungsprozess einbeziehen.
Durch die Verwendung einer .dockerignore-Datei wird die Bildgröße erheblich reduziert. Dies liegt daran, dass der Erstellungsprozess nur die erforderlichen Dateien umfasst. Es hilft auch, die Privatsphäre der Dateien zu wahren und die Offenlegung geheimer Schlüssel oder Passwörter zu vermeiden.
Die .dockerignore-Datei ist eine Datei, die Sie im selben Ordner wie Ihre Docker-Datei erstellen. Es ist eine Textdatei, ähnlich wie eine .gitignore-Datei, das die Namen aller Dateien enthält, die Sie nicht in den Build-Prozess einbeziehen möchten.
Hier ist ein Beispiel:
8. Nutzen Sie das Prinzip des am wenigsten privilegierten Benutzers
Standardmäßig verwendet Docker den Root-Benutzer als Administrator, um die Berechtigung zum Ausführen von Befehlen zu erhalten. Dies ist jedoch eine schlechte Vorgehensweise. Liegt in einem der Container eine Schwachstelle vor, können Hacker auf den Docker-Host zugreifen.
Um dieses Szenario zu vermeiden, erstellen Sie einen dedizierten Benutzer und eine Gruppe. Sie können die erforderlichen Berechtigungen für die Gruppe festlegen, um vertrauliche Informationen zu schützen. Wenn ein Benutzer kompromittiert wird, können Sie ihn löschen, ohne das gesamte Projekt preiszugeben.
Hier ist ein Beispiel, das zeigt, wie man einen Benutzer erstellt und seine Berechtigungen festlegt:
In einigen Basisbildern sind Pseudobenutzer erstellt. Sie können die installierten Benutzer anstelle der Root-Benutzerberechtigungen verwenden.
Warum Sie die Best Practices von Docker übernehmen sollten
Best Practices sind eine großartige Möglichkeit, Schwachstellen zu reduzieren und saubereren Code zu schreiben. Es gibt viele Best Practices, die Sie auf jede von Ihnen verwendete Docker-Funktion anwenden können.
Ein gut organisiertes Projekt erleichtert die Synchronisierung mit anderen Orchestrierungstools wie Kubernetes. Sie können mit den im Artikel beschriebenen beginnen und weitere übernehmen, während Sie Docker lernen.