{"id":15324,"date":"2026-10-08T16:37:07","date_gmt":"2026-10-08T09:37:07","guid":{"rendered":"\/de\/tutorials\/?p=15324"},"modified":"2026-10-08T16:54:47","modified_gmt":"2026-10-08T09:54:47","slug":"docker-best-practices","status":"publish","type":"post","link":"\/de\/tutorials\/docker-best-practices\/","title":{"rendered":"Docker Best Practices f\u00fcr das Erstellen und Ausf\u00fchren von Containern"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Docker Best Practices sind bew&auml;hrte Richtlinien, mit denen Sie Container sicher und effizient erstellen, ausf&uuml;hren und verwalten.<\/p><p class=\"wp-block-paragraph\">Docker b&uuml;ndelt Anwendungen und ihre Abh&auml;ngigkeiten in portablen Containern, die sich in unterschiedlichen Umgebungen konsistent ausf&uuml;hren lassen.<\/p><p class=\"wp-block-paragraph\">Einheitliche Umgebungen vereinfachen Entwicklung und Bereitstellung. F&uuml;r eine zuverl&auml;ssige Containerisierung reicht es jedoch nicht aus, eine Anwendung lediglich in einem Image zu verpacken.<\/p><p class=\"wp-block-paragraph\">Die wichtigsten Best Practices betreffen daher die Bereiche, die sich in realen Umgebungen besonders stark auswirken: Image-Optimierung, effiziente Builds, Container-Sicherheit, Secret-Verwaltung, Observability und die Vorbereitung auf die Orchestrierung.<\/p><p class=\"wp-block-paragraph\">Zusammen sorgen diese Ma&szlig;nahmen daf&uuml;r, dass sich Container &uuml;ber ihren gesamten Lebenszyklus hinweg einfacher bereitstellen, skalieren, absichern und verwalten lassen.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-1-verwenden-sie-offizielle-und-schlanke-basis-images\">1. Verwenden Sie offizielle und schlanke Basis-Images<\/h2><p class=\"wp-block-paragraph\">Offizielle Images stammen von vertrauensw&uuml;rdigen Maintainern und bieten damit eine sicherere Grundlage f&uuml;r Ihre Container. Schlanke Images enthalten weniger Pakete, Tools und Bibliotheken im finalen Image.<\/p><p class=\"wp-block-paragraph\">Minimalistische Basis-Images wie Alpine beschr&auml;nken sich auf die wesentlichen Komponenten, die zum Ausf&uuml;hren einer Anwendung erforderlich sind, und halten Container dadurch schlank.<\/p><p>\n\n\n        <div class=\"protip\">\n            <div class=\"protip__heading\">\n                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M1.49234 23.5024C1.23229 23.5024 0.972242 23.4024 0.782206 23.2123C0.562165 22.9923 0.452144 22.6822 0.502153 22.3722C0.562165 21.9221 1.14227 17.9113 3.00262 16.351C3.63274 15.8209 4.43289 15.5509 5.26305 15.5609C6.09321 15.5909 6.87335 15.9109 7.47347 16.4911C8.6937 17.6913 8.76371 19.6717 7.6435 20.9919C6.0832 22.8523 2.08245 23.4324 1.63237 23.4924C1.59236 23.4924 1.54235 23.4924 1.50234 23.4924L1.49234 23.5024ZM5.16303 17.5613C4.84297 17.5613 4.53291 17.6713 4.29287 17.8813C3.60274 18.4614 3.07264 19.9317 2.75258 21.242C4.06282 20.9219 5.5331 20.3918 6.11321 19.7017C6.55329 19.1716 6.54329 18.3814 6.0832 17.9213C5.85316 17.7013 5.5431 17.5713 5.20304 17.5613C5.19304 17.5613 5.17303 17.5613 5.16303 17.5613ZM11.7243 21.8821C11.4942 21.8821 11.2642 21.8021 11.0841 21.652C10.8541 21.462 10.7241 21.1819 10.7241 20.8819V15.9109L8.08358 13.2705H3.11264C2.81259 13.2705 2.53254 13.1404 2.3425 12.9104C2.15246 12.6803 2.07245 12.3803 2.12246 12.0902C2.19247 11.7102 2.84259 8.36953 4.70294 7.12929C6.33325 6.04909 8.96375 6.49918 10.244 6.80923C11.5442 4.96889 13.2546 3.4286 15.2349 2.33839C17.4553 1.11816 19.9858 0.518051 22.4963 0.498047C23.0464 0.498047 23.4865 0.948132 23.4865 1.49824C23.4865 5.0389 22.3763 9.97983 17.1753 13.7605C17.4853 15.0408 17.9354 17.6613 16.8552 19.2816C15.615 21.1419 12.2744 21.7921 11.8943 21.8621C11.8343 21.8721 11.7743 21.8821 11.7143 21.8821H11.7243ZM12.7245 16.181V19.6016C13.7146 19.2916 14.7948 18.7915 15.2049 18.1814C15.675 17.4812 15.605 16.091 15.385 14.9008C14.5248 15.3808 13.6346 15.8109 12.7245 16.181ZM9.66388 12.0302L11.9643 14.3307C13.1845 13.8306 14.3648 13.2204 15.485 12.5103C19.9358 9.51974 21.2361 5.60901 21.4561 2.53843C19.6157 2.67846 17.8254 3.20856 16.2051 4.09872C14.2847 5.14892 12.6544 6.68921 11.4942 8.54956C10.7841 9.65977 10.174 10.82 9.66388 12.0302ZM4.39289 11.2701H7.81353C8.1936 10.3599 8.63368 9.46974 9.11377 8.60957C7.92355 8.38953 6.51329 8.31952 5.81315 8.78961C5.19304 9.19968 4.70294 10.3099 4.39289 11.2701Z\" fill=\"#673DE6\"\/>\n                <\/svg>\n                <p class=\"protip__title\">\n                    Profi-Tipp                <\/p>\n            <\/div>\n            <p class=\"protip__content\">Bevorzugen Sie f&uuml;r Produktions-Workloads Distroless-Images, etwa die von Google bereitgestellten Varianten, wenn Sie die Angriffsfl&auml;che so klein wie m&ouml;glich halten m&ouml;chten. Alpine-basierte Images eignen sich dagegen, wenn Sie w&auml;hrend der Entwicklung eine Shell oder einen Paketmanager f&uuml;r das Debugging ben&ouml;tigen.<\/p>\n                    <\/div>\n        \n\n\n\n<\/p><p class=\"wp-block-paragraph\">Gr&ouml;&szlig;ere Allzweck-Images enthalten mehr Systemprogramme und Abh&auml;ngigkeiten. Dadurch m&uuml;ssen im Laufe der Zeit auch mehr Komponenten gepatcht, gescannt und abgesichert werden. Jedes zus&auml;tzliche Paket enth&auml;lt Code, der gepflegt werden muss. Wenn Sie nicht ben&ouml;tigte Komponenten entfernen, reduzieren Sie Schwachstellen und beschleunigen das Erstellen, Herunterladen und Starten von Images.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-2-fixieren-sie-versionen-von-basis-images-fur-reproduzierbare-builds\">2. Fixieren Sie Versionen von Basis-Images f&uuml;r reproduzierbare Builds<\/h2><p class=\"wp-block-paragraph\">Fixieren Sie bestimmte Versionen von Basis-Images, damit Builds reproduzierbar bleiben und sich nicht unerwartet ver&auml;ndern. Allgemeine Tags wie <code>latest<\/code> schaffen Unsicherheit, da sich das zugrunde liegende Image jederzeit &auml;ndern kann.<\/p><p class=\"wp-block-paragraph\">Ein Dockerfile, das heute funktioniert, kann morgen ein anderes Image erzeugen, obwohl sich am Anwendungscode nichts ge&auml;ndert hat.<\/p><p class=\"wp-block-paragraph\">Durch die Versionsfixierung werden Deployments berechenbarer, da f&uuml;r jeden Build dieselbe Version des Basis-Images verwendet wird.<\/p><p class=\"wp-block-paragraph\">Tags wie <code>node:22.11-alpine<\/code> oder <code>python:3.12-slim<\/code> helfen, unbemerkte &Auml;nderungen an Abh&auml;ngigkeiten, unerwartete Paket-Updates und Kompatibilit&auml;tsprobleme zu vermeiden, die sich nach dem Deployment nur schwer diagnostizieren lassen.<\/p><p class=\"wp-block-paragraph\">Teams, die noch st&auml;rkere Garantien ben&ouml;tigen, k&ouml;nnen zus&auml;tzlich zu Versions-Tags auch Image-Digests fixieren. Ein Image-Digest verweist auf einen bestimmten Image-Build und stellt sicher, dass <a href=\"\/de\/tutorials\/was-ist-docker\/\">Docker<\/a> jedes Mal exakt dasselbe Image abruft.<\/p><p class=\"wp-block-paragraph\">Der Nachteil ist der zus&auml;tzliche Wartungsaufwand, da fixierte Digests nicht automatisch aktualisiert werden. Sicherheitspatches und neue Releases m&uuml;ssen manuell gepr&uuml;ft und im Dockerfile aktualisiert werden.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-3-schreiben-sie-effiziente-dockerfiles\">3. Schreiben Sie effiziente Dockerfiles<\/h2><p class=\"wp-block-paragraph\">Achten Sie beim Schreiben von Dockerfiles auf Image-Gr&ouml;&szlig;e, Build-Geschwindigkeit und Sicherheit. Der Aufbau des Dockerfiles bestimmt, wie viele Layer Docker erstellt, wie viele Daten das finale Image enth&auml;lt und wie effizient sp&auml;tere Builds bereits zwischengespeicherte Arbeit wiederverwenden k&ouml;nnen.<\/p><p class=\"wp-block-paragraph\">Effiziente Dockerfiles vermeiden unn&ouml;tige Abh&auml;ngigkeiten und entfernen tempor&auml;re Dateien nach der Paketinstallation.<\/p><p class=\"wp-block-paragraph\">Build-Tools, Paket-Caches, Protokolle und heruntergeladene Archive sollten nicht im Runtime-Image verbleiben, sofern die Anwendung sie nicht ben&ouml;tigt. Zus&auml;tzliche Dateien vergr&ouml;&szlig;ern das Image und erh&ouml;hen die Zahl der Komponenten, die gescannt, gepatcht und gepflegt werden m&uuml;ssen.<\/p><p class=\"wp-block-paragraph\">Auch die Verwaltung der Layer ist wichtig. Fassen Sie zusammengeh&ouml;rige Befehle in einer einzigen <strong>RUN<\/strong>-Anweisung zusammen, um unn&ouml;tige Layer zu vermeiden. Ein kleineres Image ist allerdings nur dann von Vorteil, wenn sp&auml;tere Entwickler nachvollziehen k&ouml;nnen, wie es erstellt wird, und die Anweisungen sicher aktualisieren k&ouml;nnen.<\/p><p class=\"wp-block-paragraph\">Vorhersehbar aufgebaute Dockerfiles lassen sich langfristig leichter pflegen. Eine klare Reihenfolge der Anweisungen, explizit definierte Abh&auml;ngigkeiten und gut lesbare Befehle verringern unerwartete Build-Ergebnisse und erleichtern die Fehlersuche bei Deployments.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-4-reduzieren-sie-die-image-grose-mit-multi-stage-builds\">4. Reduzieren Sie die Image-Gr&ouml;&szlig;e mit Multi-Stage-Builds<\/h2><p class=\"wp-block-paragraph\">Trennen Sie mit Multi-Stage-Builds die f&uuml;r den Build ben&ouml;tigten Tools von den Runtime-Abh&auml;ngigkeiten. Build-Tools, Compiler, Paketmanager und Quelldateien werden nur w&auml;hrend des Builds ben&ouml;tigt.<\/p><p class=\"wp-block-paragraph\">Das finale <strong>Image<\/strong> enth&auml;lt lediglich die kompilierte Anwendung und die Dateien, die f&uuml;r deren Ausf&uuml;hrung erforderlich sind.<\/p><p class=\"wp-block-paragraph\">Multi-Stage-Builds verkleinern Images, indem sie Komponenten ausschlie&szlig;en, die zur Runtime nicht ben&ouml;tigt werden. Kleinere Images lassen sich schneller &uuml;bertragen und starten und ben&ouml;tigen weniger Speicherplatz.<\/p><p class=\"wp-block-paragraph\">Werden Build-Tools und Entwicklungsabh&auml;ngigkeiten entfernt, verringert sich au&szlig;erdem die Angriffsfl&auml;che, da im laufenden Container weniger Komponenten verf&uuml;gbar sind.<\/p><p class=\"wp-block-paragraph\">Besonders effektiv sind Multi-Stage-Builds bei kompilierten Anwendungen und Projekten mit umfangreichen Build-Abh&auml;ngigkeiten.<\/p><p class=\"wp-block-paragraph\">Sprachen, Runtimeumgebungen und Bibliotheken wie Go, Java, .NET, Node.js und <a href=\"\/de\/tutorials\/was-ist-react\/\">React<\/a> profitieren h&auml;ufig von diesem Ansatz, weil die Build-Umgebung deutlich gr&ouml;&szlig;er ist als die Runtime-Umgebung.<\/p><p>\n\n\n        <div class=\"protip\">\n            <div class=\"protip__heading\">\n                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M1.49234 23.5024C1.23229 23.5024 0.972242 23.4024 0.782206 23.2123C0.562165 22.9923 0.452144 22.6822 0.502153 22.3722C0.562165 21.9221 1.14227 17.9113 3.00262 16.351C3.63274 15.8209 4.43289 15.5509 5.26305 15.5609C6.09321 15.5909 6.87335 15.9109 7.47347 16.4911C8.6937 17.6913 8.76371 19.6717 7.6435 20.9919C6.0832 22.8523 2.08245 23.4324 1.63237 23.4924C1.59236 23.4924 1.54235 23.4924 1.50234 23.4924L1.49234 23.5024ZM5.16303 17.5613C4.84297 17.5613 4.53291 17.6713 4.29287 17.8813C3.60274 18.4614 3.07264 19.9317 2.75258 21.242C4.06282 20.9219 5.5331 20.3918 6.11321 19.7017C6.55329 19.1716 6.54329 18.3814 6.0832 17.9213C5.85316 17.7013 5.5431 17.5713 5.20304 17.5613C5.19304 17.5613 5.17303 17.5613 5.16303 17.5613ZM11.7243 21.8821C11.4942 21.8821 11.2642 21.8021 11.0841 21.652C10.8541 21.462 10.7241 21.1819 10.7241 20.8819V15.9109L8.08358 13.2705H3.11264C2.81259 13.2705 2.53254 13.1404 2.3425 12.9104C2.15246 12.6803 2.07245 12.3803 2.12246 12.0902C2.19247 11.7102 2.84259 8.36953 4.70294 7.12929C6.33325 6.04909 8.96375 6.49918 10.244 6.80923C11.5442 4.96889 13.2546 3.4286 15.2349 2.33839C17.4553 1.11816 19.9858 0.518051 22.4963 0.498047C23.0464 0.498047 23.4865 0.948132 23.4865 1.49824C23.4865 5.0389 22.3763 9.97983 17.1753 13.7605C17.4853 15.0408 17.9354 17.6613 16.8552 19.2816C15.615 21.1419 12.2744 21.7921 11.8943 21.8621C11.8343 21.8721 11.7743 21.8821 11.7143 21.8821H11.7243ZM12.7245 16.181V19.6016C13.7146 19.2916 14.7948 18.7915 15.2049 18.1814C15.675 17.4812 15.605 16.091 15.385 14.9008C14.5248 15.3808 13.6346 15.8109 12.7245 16.181ZM9.66388 12.0302L11.9643 14.3307C13.1845 13.8306 14.3648 13.2204 15.485 12.5103C19.9358 9.51974 21.2361 5.60901 21.4561 2.53843C19.6157 2.67846 17.8254 3.20856 16.2051 4.09872C14.2847 5.14892 12.6544 6.68921 11.4942 8.54956C10.7841 9.65977 10.174 10.82 9.66388 12.0302ZM4.39289 11.2701H7.81353C8.1936 10.3599 8.63368 9.46974 9.11377 8.60957C7.92355 8.38953 6.51329 8.31952 5.81315 8.78961C5.19304 9.19968 4.70294 10.3099 4.39289 11.2701Z\" fill=\"#673DE6\"\/>\n                <\/svg>\n                <p class=\"protip__title\">\n                    Profi-Tipp                <\/p>\n            <\/div>\n            <p class=\"protip__content\">Ein einfaches Multi-Stage-Dockerfile verwendet f&uuml;r jede Stage eine eigene <code>FROM<\/code>-Anweisung. Benennen Sie die Build-Stage, zum Beispiel mit <code>FROM node:20-alpine AS builder<\/code>, f&uuml;hren Sie die Build-Schritte aus und beginnen Sie anschlie&szlig;end eine neue Stage mit einem schlanken Basis-Image. Kopieren Sie darin mit <code>COPY --from=builder<\/code> ausschlie&szlig;lich die kompilierten Ausgabedateien.<\/p>\n                    <\/div>\n        \n\n\n\n<\/p><p class=\"wp-block-paragraph\">Durch diese Trennung bleiben Produktions-Images schlank, ohne den Entwicklungsworkflow unn&ouml;tig zu verkomplizieren.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-5-optimieren-sie-die-nutzung-des-docker-build-caches\">5. Optimieren Sie die Nutzung des Docker-Build-Caches<\/h2><p class=\"wp-block-paragraph\">Nutzen Sie den Docker-Build-Cache effizient, um Build-Zeiten zu verk&uuml;rzen und unn&ouml;tige Arbeit bei erneuten Builds zu vermeiden. Docker speichert jede Anweisung als wiederverwendbaren Layer. Unver&auml;nderte Teile des Build-Prozesses k&ouml;nnen dadurch aus dem Cache &uuml;bernommen werden, statt jedes Mal neu erstellt zu werden.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6acdc46e4b34a\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6acdc46e4b34a\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"572\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/09\/docker-best-practices-image1.jpg\/w=1024,h=1024,fit=scale-down\" alt=\"Diagramm zur Optimierung des Docker-Build-Caches mit drei Phasen: nicht optimierter Rebuild, optimierte Layer-Reihenfolge im Dockerfile und schnellerer Rebuild\" class=\"wp-image-15322\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/09\/docker-best-practices-image1.jpg\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/09\/docker-best-practices-image1.jpg\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/09\/docker-best-practices-image1.jpg\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div><p class=\"wp-block-paragraph\">Ordnen Sie die Anweisungen im Dockerfile danach, wie h&auml;ufig sie sich voraussichtlich &auml;ndern: von seltenen zu h&auml;ufigen &Auml;nderungen.<\/p><p class=\"wp-block-paragraph\">Platzieren Sie stabile Anweisungen zuerst. Die Installation von Systempaketen, die Dependency-Dateien und die grundlegende Konfiguration &auml;ndern sich in der Regel seltener als der Quellcode der Anwendung.<\/p><p class=\"wp-block-paragraph\">Kopieren Sie deshalb zun&auml;chst die Dependency-Dateien und erst danach die vollst&auml;ndige Anwendung. So kann Docker die Layer f&uuml;r die Installation der Abh&auml;ngigkeiten wiederverwenden, wenn sich lediglich der Anwendungscode ge&auml;ndert hat.<\/p><p class=\"wp-block-paragraph\">Formulieren Sie auch die Paketinstallation sorgf&auml;ltig. Fassen Sie <code>apt-get update<\/code> und <code>apt-get install<\/code> in einer einzigen Anweisung zusammen, damit die Paketindizes mit den installierten Paketen &uuml;bereinstimmen.<\/p><p class=\"wp-block-paragraph\">Entfernen Sie Paket-Caches nach der Installation, damit keine unn&ouml;tigen Dateien im Image gespeichert werden. Kleinere Images lassen sich schneller &uuml;bertragen, ben&ouml;tigen weniger Speicherplatz und enthalten weniger Daten, die gescannt und gepflegt werden m&uuml;ssen.<\/p><p class=\"wp-block-paragraph\">Sortieren Sie mehrzeilige Argumente, sofern dies sinnvoll ist. Sortierte Paketlisten reduzieren doppelte Eintr&auml;ge, erleichtern Reviews und machen &Auml;nderungen schneller erkennbar, wenn Abh&auml;ngigkeiten hinzugef&uuml;gt oder entfernt werden.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-6-schliesen-sie-unnotige-dateien-mit-dockerignore-aus\">6. Schlie&szlig;en Sie unn&ouml;tige Dateien mit .dockerignore aus<\/h2><p class=\"wp-block-paragraph\">Verwenden Sie eine <code>.dockerignore<\/code>-Datei, um Dateien und Verzeichnisse vom Build auszuschlie&szlig;en, die daf&uuml;r nicht ben&ouml;tigt werden.<\/p><p class=\"wp-block-paragraph\">Docker &uuml;bertr&auml;gt vor dem Erstellen eines Images den gesamten Build-Kontext an den Docker-Daemon. Unn&ouml;tige Dateien erh&ouml;hen daher die zu verarbeitende Datenmenge und erh&ouml;hen zugleich das Risiko, versehentlich sensible Informationen einzubeziehen.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6acdc46e4c1da\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6acdc46e4c1da\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"572\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/09\/docker-best-practices-image2.jpg\/w=1024,h=1024,fit=scale-down\" alt=\"Systemdiagramm zur Filterung des Docker-Build-Kontexts mit .dockerignore: Projektdateien durchlaufen von links nach rechts einen Filter, w&auml;hrend sensible und unn&ouml;tige Dateien ausgesondert werden. Das Ergebnis ist ein optimierter Build-Kontext f&uuml;r schnellere und sicherere Image-Builds.\" class=\"wp-image-15323\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/09\/docker-best-practices-image2.jpg\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/09\/docker-best-practices-image2.jpg\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/09\/docker-best-practices-image2.jpg\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div><p class=\"wp-block-paragraph\">Schlie&szlig;en Sie sensible Dateien wie <code>.env<\/code>-Dateien, SSH-Schl&uuml;ssel, Zugangsdaten, lokale Konfigurationsdateien und andere Secrets aus.<\/p><p class=\"wp-block-paragraph\">Wenn solche Dateien versehentlich in den Build-Kontext gelangen, steigt das Risiko, dass sensible Informationen &uuml;ber Container-Images, Image-Registries oder Build-Systeme offengelegt werden.<\/p><p class=\"wp-block-paragraph\">Schlie&szlig;en Sie auch Inhalte aus, die f&uuml;r den Build nicht erforderlich sind. Metadaten der Versionsverwaltung, lokale Protokolle, tempor&auml;re Dateien, Testartefakte, Dependency-Caches und Entwicklungsverzeichnisse erh&ouml;hen die Datenmenge, die Docker bei Builds verarbeiten muss.<\/p><p class=\"wp-block-paragraph\">Ein kleinerer Build-Kontext beschleunigt das Erstellen von Images, vermeidet unn&ouml;tig gro&szlig;e Images und sorgt daf&uuml;r, dass Container-Images auf die Dateien beschr&auml;nkt bleiben, die zum Ausf&uuml;hren der Anwendung erforderlich sind.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-7-fuhren-sie-container-als-non-root-benutzer-aus\">7. F&uuml;hren Sie Container als Non-Root-Benutzer aus<\/h2><p class=\"wp-block-paragraph\">Prozesse, die als Root ausgef&uuml;hrt werden, verf&uuml;gen innerhalb des Containers &uuml;ber erweiterte Rechte. Dadurch k&ouml;nnen die Folgen einer Kompromittierung schwerwiegender ausfallen.<\/p><p class=\"wp-block-paragraph\">Eine Schwachstelle, &uuml;ber die Angreifer Befehle innerhalb eines Containers ausf&uuml;hren k&ouml;nnen, wird gef&auml;hrlicher, wenn die Anwendung mit uneingeschr&auml;nkten Berechtigungen l&auml;uft.<\/p><p class=\"wp-block-paragraph\">Erstellen Sie einen eigenen Benutzer f&uuml;r die Anwendung und wechseln Sie im Dockerfile mit der <code>USER<\/code>-Anweisung zu diesem Benutzer. Wird die Anwendung unter einem Non-Root-Konto ausgef&uuml;hrt, sind die Zugriffs- und &Auml;nderungsm&ouml;glichkeiten des Prozesses eingeschr&auml;nkt. Dadurch l&auml;sst sich der m&ouml;gliche Schaden reduzieren, falls die Anwendung kompromittiert wird.<\/p><p class=\"wp-block-paragraph\">Wenden Sie das Prinzip der geringsten Rechte auch auf Dateien und Verzeichnisse an. Gew&auml;hren Sie Containern nur Zugriff auf die Dateien und Ressourcen, die sie f&uuml;r den normalen Betrieb ben&ouml;tigen, und konfigurieren Sie die Dateisystemberechtigungen entsprechend.<\/p><p class=\"wp-block-paragraph\">Wenn Sie Berechtigungen sowohl auf Benutzer- als auch auf Dateisystemebene einschr&auml;nken, reduzieren Sie die Angriffsfl&auml;che und begrenzen die Auswirkungen von Sicherheitsvorf&auml;llen.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-8-verwalten-sie-secrets-zur-runtime-sicher\">8. Verwalten Sie Secrets zur Runtime sicher<\/h2><p class=\"wp-block-paragraph\">Fest im Code hinterlegte API-Schl&uuml;ssel, Datenbankpassw&ouml;rter, Zugriffstoken und Zertifikate bleiben im Image eingebettet und k&ouml;nnen &uuml;ber Quellcode-Repositorys, Container-Registries, Image-Scans oder gemeinsam genutzte Build-Artefakte offengelegt werden.<\/p><p class=\"wp-block-paragraph\">Wenn Sie Secrets aus Container-Images heraushalten, verhindern Sie, dass Zugangsdaten zusammen mit dem Anwendungscode verteilt werden.<\/p><p>\n\n\n    <div class=\"announcement-block announcement-block--warning\">\n        <span class=\"announcement-block__heading\">\n            <svg width=\"24\" height=\"26\" viewBox=\"0 0 24 26\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n                d=\"M12 23.5C17.799 23.5 22.5 18.799 22.5 13C22.5 7.20101 17.799 2.5 12 2.5C6.20101 2.5 1.5 7.20101 1.5 13C1.5 18.799 6.20101 23.5 12 23.5ZM13.637 8.65198C13.637 7.74791 12.9041 7.01501 12 7.01501C11.0959 7.01501 10.363 7.74791 10.363 8.65198C10.5335 10.5375 10.875 14.383 10.875 14.383C10.875 15.0043 11.3787 15.508 12 15.508C12.6213 15.508 13.125 15.0043 13.125 14.383V14.38L13.637 8.65198ZM11.9927 16.714C11.3714 16.714 10.8677 17.2177 10.8677 17.839C10.8677 18.4603 11.3714 18.964 11.9927 18.964H12.0073C12.6286 18.964 13.1323 18.4603 13.1323 17.839C13.1323 17.2177 12.6286 16.714 12.0073 16.714H11.9927Z\"\n                fill=\"#BE1025\"\/>\n            <\/svg>\n            Warning        <\/span>\n        <p class=\"announcement-block__content\">\n            &Uuml;bergeben Sie Secrets nicht mit <code>--build-arg<\/code> als Docker-Build-Argumente. Auf diese Weise &uuml;bermittelte Werte werden in der Image-History bzw. den Image-Layern gespeichert und k&ouml;nnen mit <code>docker history<\/code> ausgelesen werden, selbst wenn sie im finalen Image oder Dockerfile nicht sichtbar sind.        <\/p>\n    <\/div>\n\n    \n\n\n\n<\/p><p class=\"wp-block-paragraph\">Speichern Sie sensible Werte mit Tools, die f&uuml;r die Secret-Verwaltung vorgesehen sind, beispielsweise HashiCorp Vault, AWS Secrets Manager oder Azure Key Vault.<\/p><p class=\"wp-block-paragraph\"><a href=\"\/de\/tutorials\/docker-build-secrets-verwenden\/\">Docker Secrets<\/a> bieten eine sicherere M&ouml;glichkeit, Zugangsdaten direkt in laufende Container einzubinden, ohne sie in Umgebungsvariablen, Image-Layern oder Prozesslisten offenzulegen.<\/p><p class=\"wp-block-paragraph\">Umgebungsvariablen sind f&uuml;r die Runtime-Konfiguration weit verbreitet, sollten bei Secrets jedoch nur als Ausweichl&ouml;sung dienen. Sie lassen sich &uuml;ber <code>docker inspect<\/code> einsehen und k&ouml;nnen in Protokollen auftauchen, wenn eine Anwendung ihre Umgebung ausgibt.<\/p><p class=\"wp-block-paragraph\">Befolgen Sie die Best Practices f&uuml;r Umgebungsvariablen: Speichern Sie sensible Werte au&szlig;erhalb des Anwendungscodes, beschr&auml;nken Sie den Zugriff auf Zugangsdaten und verhindern Sie, dass Secrets in Protokolle geschrieben werden.<\/p><p class=\"wp-block-paragraph\">Bei gr&ouml;&szlig;eren Deployments kommen h&auml;ufig externe Plattformen f&uuml;r die Secret-Verwaltung zum Einsatz, um Zugangsdaten, Zugriffssteuerung, Audits und Rotation zentral zu verwalten.<\/p><p class=\"wp-block-paragraph\">Um die Offenlegung von Secrets zu verhindern, reicht die Wahl der richtigen Speichermethode allein nicht aus. Beschr&auml;nken Sie den Zugriff auf sensible Werte, vermeiden Sie das Protokollieren von Zugangsdaten, pr&uuml;fen Sie Images auf versehentlich enthaltene Secrets und rotieren Sie Zugangsdaten regelm&auml;&szlig;ig.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-9-begrenzen-sie-container-berechtigungen-und-ressourcen\">9. Begrenzen Sie Container-Berechtigungen und Ressourcen<\/h2><p class=\"wp-block-paragraph\">Container sollten nur &uuml;ber die Berechtigungen verf&uuml;gen, die sie f&uuml;r ihre vorgesehene Funktion ben&ouml;tigen. Begrenzen Sie daher Container-Capabilities und Ressourcen nach dem Prinzip der geringsten Rechte.<\/p><p class=\"wp-block-paragraph\">Unn&ouml;tige Berechtigungen versch&auml;rfen die Folgen einer Kompromittierung, weil Angreifer dadurch auf mehr Systemressourcen und Funktionen zugreifen k&ouml;nnen, als die Anwendung tats&auml;chlich ben&ouml;tigt.<\/p><p class=\"wp-block-paragraph\">F&uuml;hren Sie Container m&ouml;glichst nicht als Root aus und beschr&auml;nken Sie den Zugriff auf sensible Bereiche des Host-Systems.<\/p><p class=\"wp-block-paragraph\">User Namespaces ordnen Benutzer innerhalb eines Containers weniger privilegierten Benutzern auf dem Host zu. Dadurch sinkt das Risiko von Container-Escapes und Rechteausweitungen.<\/p><p class=\"wp-block-paragraph\">Schreibgesch&uuml;tzte Dateisysteme bieten eine weitere Schutzebene, da weder Anwendungen noch Angreifer Dateien ver&auml;ndern k&ouml;nnen, die im normalen Betrieb unver&auml;ndert bleiben sollten.<\/p><p class=\"wp-block-paragraph\">Entfernen Sie Capabilities, die die Anwendung nicht ben&ouml;tigt. Viele Container brauchen keine erweiterten Berechtigungen f&uuml;r Netzwerkfunktionen, Systemadministration oder Kernel-nahe Aufgaben, dennoch k&ouml;nnen solche Capabilities standardm&auml;&szlig;ig verf&uuml;gbar sein.<\/p><p class=\"wp-block-paragraph\">Durch die Einschr&auml;nkung von Capabilities verringern Sie die Zahl der Aktionen, die ein kompromittierter Container ausf&uuml;hren kann, und reduzieren die gesamte Angriffsfl&auml;che.<\/p><p class=\"wp-block-paragraph\">Legen Sie au&szlig;erdem explizite Ressourcenlimits fest, damit einzelne Container nicht mehr CPU-Leistung oder Arbeitsspeicher belegen als vorgesehen. Ohne solche Limits kann ein einzelner Container die Ressourcen des Hosts aussch&ouml;pfen und andere Workloads auf demselben System beeintr&auml;chtigen.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-10-konzipieren-sie-container-zustandslos-und-kurzlebig\">10. Konzipieren Sie Container zustandslos und kurzlebig<\/h2><p class=\"wp-block-paragraph\">Konzipieren Sie Container so, dass sie zustandslos und kurzlebig sind und jederzeit beendet, gel&ouml;scht und neu erstellt werden k&ouml;nnen, ohne dass wichtige Daten verloren gehen.<\/p><p class=\"wp-block-paragraph\">Ein Container sollte den Anwendungsprozess ausf&uuml;hren und nicht als dauerhafter Speicherort f&uuml;r Dateien, Datenbanken, Sitzungen oder Benutzer-Uploads dienen.<\/p><p class=\"wp-block-paragraph\">Speichern Sie persistente Daten au&szlig;erhalb des Containers. Docker Volumes, verwaltete Datenbanken, Object Storage und externe Dienste sorgen daf&uuml;r, dass wichtige Daten auch dann verf&uuml;gbar bleiben, wenn Container bei Updates, Ausf&auml;llen oder Skalierungsvorg&auml;ngen ersetzt werden.<\/p><p class=\"wp-block-paragraph\">Die Trennung von Anwendungs-Runtime und persistentem Speicher vereinfacht au&szlig;erdem Backups, Migrationen und Wiederherstellungsprozesse.<\/p><p class=\"wp-block-paragraph\">Zustandslose Container lassen sich leichter skalieren und orchestrieren. Orchestrierungsplattformen k&ouml;nnen ausgefallene Container neu starten, Workloads zwischen Hosts verschieben und zus&auml;tzliche Replikate erstellen, ohne von Daten abh&auml;ngig zu sein, die in einer bestimmten Container-Instanz gespeichert sind.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-11-fugen-sie-health-checks-fur-dauerhaft-laufende-dienste-hinzu\">11. F&uuml;gen Sie Health Checks f&uuml;r dauerhaft laufende Dienste hinzu<\/h2><p class=\"wp-block-paragraph\">Mit Health Checks f&uuml;r dauerhaft laufende Dienste k&ouml;nnen Docker und Orchestrierungsplattformen erkennen, wenn ein Container nicht mehr ordnungsgem&auml;&szlig; funktioniert.<\/p><p class=\"wp-block-paragraph\">Ein <a href=\"\/de\/tutorials\/docker-tutorial\/\">laufender Container<\/a> ist nicht zwangsl&auml;ufig auch ein funktionierender Container. Eine Anwendung kann beispielsweise nicht mehr auf Anfragen reagieren, die Verbindung zur Datenbank verlieren oder in einen Fehlerzustand geraten, w&auml;hrend der Container-Prozess weiterhin l&auml;uft.<\/p><p class=\"wp-block-paragraph\">Mit der <code>HEALTHCHECK<\/code>-Anweisung kann Docker regelm&auml;&szlig;ig Pr&uuml;fungen ausf&uuml;hren und den Health-Status eines Containers melden.<\/p><p class=\"wp-block-paragraph\">Health Checks k&ouml;nnen beispielsweise pr&uuml;fen, ob eine Anwendung auf HTTP-Anfragen antwortet, Verbindungen akzeptiert oder andere grundlegende Funktionen ausf&uuml;hrt, die f&uuml;r den normalen Betrieb erforderlich sind.<\/p><p>\n\n\n        <div class=\"protip\">\n            <div class=\"protip__heading\">\n                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M1.49234 23.5024C1.23229 23.5024 0.972242 23.4024 0.782206 23.2123C0.562165 22.9923 0.452144 22.6822 0.502153 22.3722C0.562165 21.9221 1.14227 17.9113 3.00262 16.351C3.63274 15.8209 4.43289 15.5509 5.26305 15.5609C6.09321 15.5909 6.87335 15.9109 7.47347 16.4911C8.6937 17.6913 8.76371 19.6717 7.6435 20.9919C6.0832 22.8523 2.08245 23.4324 1.63237 23.4924C1.59236 23.4924 1.54235 23.4924 1.50234 23.4924L1.49234 23.5024ZM5.16303 17.5613C4.84297 17.5613 4.53291 17.6713 4.29287 17.8813C3.60274 18.4614 3.07264 19.9317 2.75258 21.242C4.06282 20.9219 5.5331 20.3918 6.11321 19.7017C6.55329 19.1716 6.54329 18.3814 6.0832 17.9213C5.85316 17.7013 5.5431 17.5713 5.20304 17.5613C5.19304 17.5613 5.17303 17.5613 5.16303 17.5613ZM11.7243 21.8821C11.4942 21.8821 11.2642 21.8021 11.0841 21.652C10.8541 21.462 10.7241 21.1819 10.7241 20.8819V15.9109L8.08358 13.2705H3.11264C2.81259 13.2705 2.53254 13.1404 2.3425 12.9104C2.15246 12.6803 2.07245 12.3803 2.12246 12.0902C2.19247 11.7102 2.84259 8.36953 4.70294 7.12929C6.33325 6.04909 8.96375 6.49918 10.244 6.80923C11.5442 4.96889 13.2546 3.4286 15.2349 2.33839C17.4553 1.11816 19.9858 0.518051 22.4963 0.498047C23.0464 0.498047 23.4865 0.948132 23.4865 1.49824C23.4865 5.0389 22.3763 9.97983 17.1753 13.7605C17.4853 15.0408 17.9354 17.6613 16.8552 19.2816C15.615 21.1419 12.2744 21.7921 11.8943 21.8621C11.8343 21.8721 11.7743 21.8821 11.7143 21.8821H11.7243ZM12.7245 16.181V19.6016C13.7146 19.2916 14.7948 18.7915 15.2049 18.1814C15.675 17.4812 15.605 16.091 15.385 14.9008C14.5248 15.3808 13.6346 15.8109 12.7245 16.181ZM9.66388 12.0302L11.9643 14.3307C13.1845 13.8306 14.3648 13.2204 15.485 12.5103C19.9358 9.51974 21.2361 5.60901 21.4561 2.53843C19.6157 2.67846 17.8254 3.20856 16.2051 4.09872C14.2847 5.14892 12.6544 6.68921 11.4942 8.54956C10.7841 9.65977 10.174 10.82 9.66388 12.0302ZM4.39289 11.2701H7.81353C8.1936 10.3599 8.63368 9.46974 9.11377 8.60957C7.92355 8.38953 6.51329 8.31952 5.81315 8.78961C5.19304 9.19968 4.70294 10.3099 4.39289 11.2701Z\" fill=\"#673DE6\"\/>\n                <\/svg>\n                <p class=\"protip__title\">\n                    Profi-Tipp                <\/p>\n            <\/div>\n            <p class=\"protip__content\">Stimmen Sie die Parameter <code>--interval<\/code>, <code>--timeout<\/code> und <code>--retries<\/code> auf die Startzeit Ihrer Anwendung ab. Ben&ouml;tigt ein Dienst beispielsweise 30 Sekunden f&uuml;r die Initialisierung, verwenden Sie <code>--start-period=30s<\/code>, damit w&auml;hrend des Starts keine falschen Fehlermeldungen gemeldet werden.<\/p>\n                    <\/div>\n        \n\n\n\n<\/p><p class=\"wp-block-paragraph\">Container-Orchestratoren nutzen den Health Status f&uuml;r automatisierte Wiederherstellungsma&szlig;nahmen. Fehlgeschlagene Health Checks k&ouml;nnen einen Neustart des Containers, den Austausch fehlerhafter Instanzen oder das Entfernen von Containern aus der Weiterleitung des Datenverkehrs ausl&ouml;sen.<\/p><p class=\"wp-block-paragraph\">Werden Anwendungsfehler fr&uuml;hzeitig erkannt, reduziert das Ausfallzeiten und tr&auml;gt dazu bei, die Verf&uuml;gbarkeit von Diensten in Produktionsumgebungen aufrechtzuerhalten.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-12-scannen-sie-images-regelmasig-auf-schwachstellen\">12. Scannen Sie Images regelm&auml;&szlig;ig auf Schwachstellen<\/h2><p class=\"wp-block-paragraph\">Regelm&auml;&szlig;ige Scans von Container-Images helfen, bekannte Schwachstellen zu erkennen, bevor die Images in die Produktionsumgebung gelangen.<\/p><p class=\"wp-block-paragraph\">Schwachstellen-Scanner wie Trivy, Docker Scout und Snyk gleichen installierte Pakete, Bibliotheken und Abh&auml;ngigkeiten mit Sicherheitsdatenbanken ab. So k&ouml;nnen Teams veraltete Software und bekannte Sicherheitsprobleme bereits fr&uuml;h im Entwicklungsprozess erkennen.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"6acdc46e4dec4\"}' data-wp-interactive=\"core\/image\" data-wp-key=\"6acdc46e4dec4\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"572\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/09\/docker-best-practices-image3.jpg\/w=1024,h=1024,fit=scale-down\" alt=\"Systemdiagramm f&uuml;r Container-Sicherheitsscans: flache, dunkelviolette Vektorillustration mit drei Modulen &ndash; einem aus mehreren Layern bestehenden Container-Image, einem Schwachstellen-Scanner mit angebundener Sicherheitsdatenbank und einem automatisierten CI\/CD-Pipeline-Gate vor der sichereren Produktionsumgebung\" class=\"wp-image-15321\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/09\/docker-best-practices-image3.jpg\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/09\/docker-best-practices-image3.jpg\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2026\/09\/docker-best-practices-image3.jpg\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" data-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on--click=\"actions.showLightbox\" data-wp-style--right=\"state.thisImage.buttonRight\" data-wp-style--top=\"state.thisImage.buttonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div><p class=\"wp-block-paragraph\">Integrieren Sie Image-Scans in CI\/CD-Pipelines, damit Sicherheitspr&uuml;fungen bei Builds und Deployments automatisch ausgef&uuml;hrt werden.<\/p><p class=\"wp-block-paragraph\">Automatisierte Scans helfen dabei, Schwachstellen zu erkennen, bevor Images in Registries ver&ouml;ffentlicht oder in Produktionsumgebungen bereitgestellt werden. Dadurch sinkt das Risiko, unsichere Releases produktiv einzusetzen.<\/p><p class=\"wp-block-paragraph\">Scannen Sie sowohl das Basis-Image als auch die Anwendungslayer. Selbst eine sichere Anwendung kann Schwachstellen von einem veralteten Basis-Image &uuml;bernehmen. Umgekehrt sch&uuml;tzt auch ein vollst&auml;ndig gepatchtes Basis-Image nicht vor unsicheren Anwendungsabh&auml;ngigkeiten.<\/p><p class=\"wp-block-paragraph\">Die Pr&uuml;fung des gesamten Images vermittelt ein genaueres Bild der Container-Sicherheit und hilft dabei, Behebungsma&szlig;nahmen vor dem Deployment zu priorisieren.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-13-uberwachen-und-protokollieren-sie-container-aktivitaten\">13. &Uuml;berwachen und protokollieren Sie Container-Aktivit&auml;ten<\/h2><p class=\"wp-block-paragraph\">Durch die &Uuml;berwachung und Protokollierung von Container-Aktivit&auml;ten behalten Sie den &Uuml;berblick &uuml;ber Zustand, Leistung und Fehler Ihrer Anwendungen.<\/p><p class=\"wp-block-paragraph\">Containerisierte Umgebungen sind dynamisch: Container werden regelm&auml;&szlig;ig gestartet, beendet, skaliert und ersetzt. Ohne zuverl&auml;ssige Observability wird es erheblich schwieriger, die Ursache von Leistungsproblemen oder Anwendungsausf&auml;llen zu ermitteln.<\/p><p class=\"wp-block-paragraph\">Zentralisieren Sie Protokolle und erfassen Sie Metriken von Containern, Hosts und unterst&uuml;tzenden Diensten. Eine zentrale Protokollierung erleichtert die Fehlersuche in verteilten Anwendungen. Metriken helfen dabei, Ressourcenauslastung, Antwortzeiten, Anfragevolumen und weitere Indikatoren f&uuml;r den Zustand einer Anwendung zu &uuml;berwachen.<\/p><p class=\"wp-block-paragraph\">Zusammen liefern Protokolle und Metriken den n&ouml;tigen Kontext, um Probleme zu beheben und Leistungsengp&auml;sse zu erkennen.<\/p><p class=\"wp-block-paragraph\">Verwenden Sie Monitoring-Tools, die sich gut in containerisierte Umgebungen integrieren lassen. Prometheus und Grafana werden h&auml;ufig f&uuml;r die Erfassung und Visualisierung von Metriken eingesetzt. L&ouml;sungen wie der ELK Stack aus Elasticsearch, Logstash und Kibana sowie Loki helfen dabei, Container-Protokolle zentral zu erfassen und auszuwerten.<\/p><p class=\"wp-block-paragraph\">Das Erfassen von Protokollen und Metriken ist jedoch nur dann hilfreich, wenn die zust&auml;ndigen Personen bei Problemen benachrichtigt werden. Konfigurieren Sie Warnmeldungen f&uuml;r Zust&auml;nde, die auf tats&auml;chliche Probleme hinweisen, etwa dauerhaft hohe CPU- oder Arbeitsspeicherauslastung, sprunghaft steigende Fehlerraten, fehlgeschlagene Health Checks oder Container, die wiederholt neu starten.<\/p><p class=\"wp-block-paragraph\">Leiten Sie Warnmeldungen an die passenden Kan&auml;le weiter, beispielsweise an eine Messaging-Plattform, ein Incident-Management-Tool oder den Bereitschaftsdienst. So k&ouml;nnen Probleme diagnostiziert werden, bevor sie Nutzer beeintr&auml;chtigen.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-14-bereinigen-sie-ungenutzte-docker-ressourcen\">14. Bereinigen Sie ungenutzte Docker-Ressourcen<\/h2><p class=\"wp-block-paragraph\">Bereinigen Sie ungenutzte Docker-Ressourcen regelm&auml;&szlig;ig, um Speicherplatz freizugeben und Container-Hosts &uuml;bersichtlich zu halten.<\/p><p class=\"wp-block-paragraph\">Ungenutzte Images, angehaltene Container, verwaiste Volumes und nicht verwendete Netzwerke sammeln sich mit der Zeit an. Besonders h&auml;ufig tritt dies in Entwicklungsumgebungen und CI\/CD-Systemen auf, in denen Images regelm&auml;&szlig;ig erstellt und bereitgestellt werden.<\/p><p class=\"wp-block-paragraph\">Entfernen Sie nicht mehr ben&ouml;tigte Ressourcen mit Docker-Bereinigungsbefehlen wie <code>docker image prune<\/code>, <code>docker container prune<\/code>, <code>docker volume prune<\/code> und <code>docker system prune<\/code>.<\/p><p>\n\n\n    <div class=\"announcement-block announcement-block--warning\">\n        <span class=\"announcement-block__heading\">\n            <svg width=\"24\" height=\"26\" viewBox=\"0 0 24 26\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n                d=\"M12 23.5C17.799 23.5 22.5 18.799 22.5 13C22.5 7.20101 17.799 2.5 12 2.5C6.20101 2.5 1.5 7.20101 1.5 13C1.5 18.799 6.20101 23.5 12 23.5ZM13.637 8.65198C13.637 7.74791 12.9041 7.01501 12 7.01501C11.0959 7.01501 10.363 7.74791 10.363 8.65198C10.5335 10.5375 10.875 14.383 10.875 14.383C10.875 15.0043 11.3787 15.508 12 15.508C12.6213 15.508 13.125 15.0043 13.125 14.383V14.38L13.637 8.65198ZM11.9927 16.714C11.3714 16.714 10.8677 17.2177 10.8677 17.839C10.8677 18.4603 11.3714 18.964 11.9927 18.964H12.0073C12.6286 18.964 13.1323 18.4603 13.1323 17.839C13.1323 17.2177 12.6286 16.714 12.0073 16.714H11.9927Z\"\n                fill=\"#BE1025\"\/>\n            <\/svg>\n            Warning        <\/span>\n        <p class=\"announcement-block__content\">\n            Der Befehl <code>docker system prune -a<\/code> entfernt alle ungenutzten Images und nicht nur Dangling Images. Dazu geh&ouml;ren auch Images, die derzeit keinem laufenden Container zugeordnet sind, aber m&ouml;glicherweise f&uuml;r sp&auml;tere Deployments ben&ouml;tigt werden. Pr&uuml;fen Sie in gemeinsam genutzten Umgebungen und Produktionsumgebungen immer, welche Ressourcen entfernt werden, bevor Sie diesen Befehl ausf&uuml;hren.        <\/p>\n    <\/div>\n\n    \n\n\n\n<\/p><p class=\"wp-block-paragraph\">Automatisierte Bereinigungsskripte und geplante Wartungsaufgaben helfen, die Ansammlung ungenutzter Ressourcen auf dauerhaft betriebenen Hosts zu verhindern, ohne dass Sie diese regelm&auml;&szlig;ig manuell entfernen m&uuml;ssen.<\/p><p class=\"wp-block-paragraph\">Der Speicherverbrauch wirkt sich nicht nur auf die Festplattenauslastung aus. Gro&szlig;e Mengen ungenutzter Ressourcen erschweren die Verwaltung von Umgebungen, vergr&ouml;&szlig;ern Backups und belegen Speicher, der stattdessen f&uuml;r aktive Workloads zur Verf&uuml;gung stehen k&ouml;nnte.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-15-testen-sie-container-vor-dem-deployment\">15. Testen Sie Container vor dem Deployment<\/h2><p class=\"wp-block-paragraph\">Testen Sie Container vor dem Deployment, um sicherzustellen, dass ein Image unter denselben Bedingungen funktioniert wie sp&auml;ter in der Produktionsumgebung.<\/p><p class=\"wp-block-paragraph\">Ein erfolgreicher Build best&auml;tigt lediglich, dass Docker ein Image erstellen konnte. Er belegt nicht, dass die Anwendung korrekt startet, Verbindungen zu den ben&ouml;tigten Diensten herstellt, Datenverkehr verarbeitet oder die Sicherheitsanforderungen erf&uuml;llt.<\/p><p class=\"wp-block-paragraph\">Integrieren Sie Container-Tests in den Entwicklungsworkflow. Unit-Tests pr&uuml;fen die Anwendungslogik, Integrationstests &uuml;berpr&uuml;fen Dienstverbindungen innerhalb der Container und Sicherheitsscans suchen vor dem Release nach bekannten Schwachstellen in Images.<\/p><p class=\"wp-block-paragraph\">Auch Performance-Tests helfen dabei, lange Startzeiten, ungeeignete Ressourcenlimits und Runtime-Probleme zu erkennen, die nur in der containerisierten Umgebung auftreten.<\/p><p class=\"wp-block-paragraph\">Automatisieren Sie Container-Tests, wo immer dies m&ouml;glich ist. CI\/CD-Tools wie GitHub Actions, GitLab CI\/CD, Jenkins und CircleCI k&ouml;nnen Images erstellen, Tests ausf&uuml;hren, Schwachstellen-Scans durchf&uuml;hren und ein Deployment blockieren, wenn eine Pr&uuml;fung fehlschl&auml;gt.<\/p><p class=\"wp-block-paragraph\">Automatisierte Tests verringern das Risiko, fehlerhafte oder unsichere Container in Produktionsumgebungen bereitzustellen.<\/p><h2 class=\"wp-block-heading h-t-title-2\" id=\"h-so-wahlen-sie-die-richtige-plattform-fur-die-container-orchestrierung\">So w&auml;hlen Sie die richtige Plattform f&uuml;r die Container-Orchestrierung<\/h2><p class=\"wp-block-paragraph\">W&auml;hlen Sie die Plattform f&uuml;r die Container-Orchestrierung anhand der Komplexit&auml;t Ihrer Umgebung, Ihrer Skalierungsanforderungen, der verf&uuml;gbaren betrieblichen Ressourcen und des Integrationsbedarfs aus.<\/p><p class=\"wp-block-paragraph\">Entscheidend ist weniger der reine Funktionsumfang als vielmehr die Frage, wie viel Infrastruktur Sie selbst verwalten m&uuml;ssen.<\/p><p class=\"wp-block-paragraph\"><strong>Bewerten Sie zun&auml;chst Gr&ouml;&szlig;e und Komplexit&auml;t des Workloads.<\/strong> Anwendungen mit wenigen Containern ben&ouml;tigen in der Regel weniger Orchestrierungsfunktionen als gro&szlig;e verteilte Systeme mit Dutzenden oder Hunderten von Diensten.<\/p><p class=\"wp-block-paragraph\">Eine leistungsf&auml;higere Plattform zu verwalten, als der Workload tats&auml;chlich erfordert, verursacht zus&auml;tzlichen Betriebsaufwand, ohne einen entsprechenden Nutzen zu bieten.<\/p><p class=\"wp-block-paragraph\"><strong>Ber&uuml;cksichtigen Sie anschlie&szlig;end den erforderlichen Automatisierungsgrad.<\/strong> Kubernetes bietet fortgeschrittene Funktionen wie automatische Skalierung, Self-Healing, Service Discovery und Rolling Updates.<\/p><p class=\"wp-block-paragraph\">Diese Funktionen sind in gro&szlig;en Produktionsumgebungen wertvoll, bringen jedoch zus&auml;tzlichen Aufwand bei Einrichtung, Wartung und Betrieb mit sich.<\/p><p class=\"wp-block-paragraph\">Docker Swarm und HashiCorp Nomad sind einfachere Alternativen. Docker Swarm ist eng in Docker integriert und erfordert weniger zu verwaltende Komponenten als Kubernetes.<\/p><p class=\"wp-block-paragraph\">Nomad unterst&uuml;tzt sowohl containerisierte als auch nicht containerisierte Workloads und l&auml;sst sich gut mit Tools wie Consul und Vault integrieren.<\/p><p class=\"wp-block-paragraph\">Beide Plattformen eignen sich, wenn keine fortgeschrittenen Orchestrierungsfunktionen erforderlich sind.<\/p><p class=\"wp-block-paragraph\"><strong>Pr&uuml;fen Sie vor der endg&uuml;ltigen Entscheidung auch die Community-Unterst&uuml;tzung und den Reifegrad des &Ouml;kosystems.<\/strong> Kubernetes verf&uuml;gt &uuml;ber das gr&ouml;&szlig;te &Ouml;kosystem, die umfangreichste Tool-Unterst&uuml;tzung und die umfassendste Dokumentation.<\/p><p class=\"wp-block-paragraph\">Kleinere Plattformen k&ouml;nnen einfacher zu betreiben sein, bieten jedoch weniger Integrationen von Drittanbietern und weniger Lernressourcen.<\/p><p class=\"wp-block-paragraph\">Die Orchestrierungsplattform ist nur ein Bestandteil der Deployment-Strategie. Ebenso wichtig ist eine zuverl&auml;ssige Infrastruktur f&uuml;r den Betrieb containerisierter Workloads.<\/p><p class=\"wp-block-paragraph\">Das <a href=\"\/de\/docker-hosting\">Docker VPS-Hosting<\/a> von Hostinger bietet dedizierte CPU-, RAM- und Speicherressourcen sowie einen integrierten Docker Manager, automatische Backups und KI-gest&uuml;tzte Tools zur Serververwaltung, die die Bereitstellung und Verwaltung von Containern vereinfachen.<\/p><figure class=\"wp-block-image size-large\"><a aria-label=\"Vps server\" href=\"\/de\/vps-server\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2024\/02\/DE-VPS-hosting_in-text-banner.png\/w=1024,h=1024,fit=scale-down\" alt=\"\" class=\"wp-image-3556\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2024\/02\/DE-VPS-hosting_in-text-banner.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2024\/02\/DE-VPS-hosting_in-text-banner.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/29\/2024\/02\/DE-VPS-hosting_in-text-banner.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Docker Best Practices sind bew&auml;hrte Richtlinien, mit denen Sie Container sicher und effizient erstellen, ausf&uuml;hren und verwalten. Docker b&uuml;ndelt Anwendungen und ihre Abh&auml;ngigkeiten in portablen Containern, die sich in unterschiedlichen Umgebungen konsistent ausf&uuml;hren lassen. Einheitliche Umgebungen vereinfachen Entwicklung und Bereitstellung. F&uuml;r eine zuverl&auml;ssige Containerisierung reicht es jedoch nicht aus, eine Anwendung lediglich in einem Image [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/de\/tutorials\/docker-best-practices\/\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":392,"featured_media":15320,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Docker Best Practices f\u00fcr sichere Container","rank_math_description":"Lernen Sie Docker Best Practices f\u00fcr kleinere Images, mehr Sicherheit, optimierte Builds und zuverl\u00e4ssige Container in Produktionsumgebungen.","rank_math_focus_keyword":"docker best practices","footnotes":""},"categories":[93,55],"tags":[],"class_list":["post-15324","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vorinstallierte-anwendungen","category-vps"],"hreflangs":[{"locale":"en-US","link":"https:\/\/www.hostinger.com\/tutorials\/docker-best-practices","default":1},{"locale":"en-PH","link":"https:\/\/www.hostinger.com\/ph\/tutorials\/docker-best-practices","default":0},{"locale":"en-MY","link":"https:\/\/www.hostinger.com\/my\/tutorials\/docker-best-practices","default":0},{"locale":"en-GB","link":"https:\/\/www.hostinger.com\/uk\/tutorials\/docker-best-practices","default":0},{"locale":"en-IN","link":"https:\/\/www.hostinger.com\/in\/tutorials\/docker-best-practices","default":0},{"locale":"en-CA","link":"https:\/\/www.hostinger.com\/ca\/tutorials\/docker-best-practices","default":0},{"locale":"en-AU","link":"https:\/\/www.hostinger.com\/au\/tutorials\/docker-best-practices","default":0},{"locale":"en-NG","link":"https:\/\/www.hostinger.com\/ng\/tutorials\/docker-best-practices","default":0},{"locale":"es-ES","link":"https:\/\/www.hostinger.com\/es\/tutoriales\/buenas-practicas-docker","default":0},{"locale":"es-AR","link":"https:\/\/www.hostinger.com\/ar\/tutoriales\/buenas-practicas-docker","default":0},{"locale":"es-MX","link":"https:\/\/www.hostinger.com\/mx\/tutoriales\/buenas-practicas-docker","default":0},{"locale":"es-CO","link":"https:\/\/www.hostinger.com\/co\/tutoriales\/buenas-practicas-docker","default":0},{"locale":"de-DE","link":"https:\/\/www.hostinger.com\/de\/tutorials\/docker-best-practices","default":0}],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/posts\/15324","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/users\/392"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/comments?post=15324"}],"version-history":[{"count":6,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/posts\/15324\/revisions"}],"predecessor-version":[{"id":15528,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/posts\/15324\/revisions\/15528"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/media\/15320"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/media?parent=15324"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/categories?post=15324"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/de\/tutorials\/wp-json\/wp\/v2\/tags?post=15324"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}