Entwicklung & Code
Docker Image Security – Teil 2: Minimale und sichere Docker Images
Viele Softwareentwicklungsteams verwenden Container-Images aus offiziellen Registries wie Docker Hub. Diese Images enthalten häufig viele Komponenten. Scanner wie Trivy oder Grype finden dann sehr viele CVEs (siehe Teil 1 dieser Serie), ob zu Recht (True Positives) oder als Fehlalarme (False Positives). Obgleich offizielle Images meist kostenlos sind, kann die Prüfung (Triage) aller gemeldeten CVE darin ein Kostentreiber sein – sofern das Team nicht riskieren will, auf die Suche tatsächlich ausnutzbarer CVEs zu verzichten.

Dr. Marius Shekow war über 10 Jahre als Forscher und Softwareentwickler bei Fraunhofer tätig. Seit 2022 ist er Lead DevOps- & Cloud-Engineer bei SprintEins in Bonn. Dort baut er für Konzerne und KMUs individuelle Cloud-Umgebungen, inkl. CI/CD-Automatisierung, Observability und Security-Absicherung.
Minimale Container-Images – auch als „distroless“, „gehärtete“ oder „chiseled“ bekannt – bieten eine Lösung für dieses Problem. Unter dem Motto „weniger Komponenten bedeuten weniger Schwachstellen“ verzichten sie auf alle Komponenten (etwa Shells oder Paketmanager), die zur Laufzeit normalerweise nicht gebraucht werden, um die Angriffsfläche zu reduzieren.
Anhand einer Gegenüberstellung der Vor- und Nachteile sowie einer Liste von kostenlosen und kostenpflichtigen minimalen Images für die Anwendungsfälle Basis-Linux, PHP, Python, Java, C#/.NET und Node.js, soll dieser Artikel DevOps-Teams bei der Auswahl geeigneter Container-Images helfen.
Was sind minimale Images?
Minimale Images enthalten nur die absolut notwendigen Komponenten, um die eigentlichen Basis-Funktionen auszuführen (beim postgres-Image ist etwa der PostgreSQL-Server die Basis-Komponente). Ziel ist, die Angriffsfläche für Hacker so weit wie möglich zu reduzieren (siehe Abbildung 1) und Komponenten auszuschließen, etwa:
- Distro-spezifische Paketmanager, z.B. apt für Debian/Ubuntu, apk für Alpine oder dnf/yum für Red Hat
- Verschiedene Linux-Distro-spezifische Pakete, die normalerweise standardmäßig installiert, aber nicht erforderlich sind, um eine Anwendung auszuführen, z.B. Binärdateien und Bibliotheken für perl, grep oder gzip. Lässt man solche Komponenten weg, hat man ein „distroless“ Image ohne Färbung von Distro-Vorlieben.
- Eine Shell (z.B. /bin/bash oder /bin/sh)
- Debugging-Werkzeuge, beispielsweise curl zur Diagnose von Verbindungsproblemen
Während Slim Images (z.B. python:3.13-slim) in der Regel kleiner als die regulären Image-Varianten sind (z.B. python:3.13), enthalten sie dennoch eine Shell und einen Paketmanager und erleichtern es daher einem Angreifer, tiefer in ein System einzudringen!

Komponenten-Vergleich: minimale vs. nicht-minimale Images (Abb. 1)
| Vor- und Nachteile von minimalen Images | |
| Vorteile | Nachteile |
| ✅ Reduzierte Startdauer | ❌ Schwieriger zu debuggen |
| ✅ Weniger Sicherheitslücken und Triage-Arbeit | ❌ Erhöhter Testaufwand |
| ✅ Verbesserte Sicherheit | ❌ Erhöhter Rechercheaufwand |
Ein Blick auf die Details der in der Tabelle gegenübergestellten Vor- und Nachteile macht deutlich, warum minimale Images nicht zwangsläufig immer die beste Wahl sind.
Vorteile:
- Reduzierte Startdauer: Minimale Images sind sehr klein und starten daher schneller, da das Herunterladen und Entpacken weniger Zeit benötigen.
- Weniger Sicherheitslücken und Triage-Arbeit: Schwachstellenscanner wie Trivy oder Grype melden für minimale Images (im Durchschnitt) deutlich weniger Schwachstellen als für nicht-minimale Images. Daher kann das Team sich auf die Softwareentwicklung konzentrieren, anstatt potenzielle False-Positive-Funde der Scanner zu untersuchen (siehe Teil 1 dieser Serie).
- Verbesserte Sicherheit: Falls ein Angreifer es schafft, eine Schwachstelle der in dem Image laufenden Software auszunutzen (z.B. eine PostgreSQL-Schwachstelle in einem PostgreSQL-Image), wird er keine beliebigen Shell-Befehle ausführen können. Denn im minimalen Image gibt es keine Shell. Er kann also keine zusätzliche Software herunterladen, um damit die (virtuelle) Infrastruktur weiter zu infiltrieren. Ein weiterer Vorteil ist, dass Schwachstellenscanner wie Trivy in den meisten minimalen Images alle vorhandenen Komponenten korrekt identifizieren, was False Negatives vermeidet.
Nachteile:
- Schwieriger zu debuggen: Wenn es Probleme im Produktivbetrieb gibt, greifen Entwickler- oder Betriebsteams häufig direkt auf die Shell im Container zu, um darin Debug-Befehle auszuführen. Bei minimalen Images funktioniert dies mangels Shell nicht mehr. Es gibt jedoch Workarounds, wie kubectl debug oder das bessere cdebug. Beide starten einen kurzlebigen (ephemeral) Sidecar-Container, der den Prozess-Namespace und das Filesystem mit dem zu debuggenden Container teilt.
- Erhöhter Testaufwand: Tauscht man bei einer containerisierten Anwendung das offizielle durch ein minimales Image aus, muss das Team manuell testen, ob es zu Kompatibilitätsproblemen kommt. Insbesondere Multi-Stage-Builds für Runtimes wie Python muss man genau betrachten. Dort kompiliert man die Anwendung in einer „Build“-Stage und kopiert sie dann in die „Final“-Stage, die das minimale Basis-Image verwendet. Verwendet man in der Build-Stage jedoch das offizielle (nicht-minimale) Image, treten oft subtile, implementierungsspezifische Inkompatibilitäten zwischen beiden Stages auf. Beispielsweise fehlen in der minimalen Final-Stage bestimmte (native) Bibliotheken oder Binärdateien. Oder der Pfad zur Runtime ist unterschiedlich, sodass der Container-Start fehlschlägt. Der Python-spezifische Abschnitt verlinkt ein konkretes Beispiel.
Zudem ist es bei der Verwendung eines minimalen Image aufgrund der fehlenden Shell nicht möglich, mehrere Befehle (oder Shell-Entrypoint-Scripte) beim Start des Containers auszuführen. - Erhöhter Rechercheaufwand: Auch wenn dieser Artikel die Recherchezeit reduziert, um das beste minimale Image zu finden, fällt trotzdem immer der Rechercheaufwand an. Es könnte sich beispielsweise zeigen, dass es kein geeignetes minimales Image gibt, sodass Interessenten ein eigenes erstellen müssen, was nicht trivial und Thema von Teil 3 der Artikelserie ist.
Verfügbare minimale (Base-) Images
Derzeit sind minimale Images nach wie vor ein Nischenmarkt. Die Maintainer von offiziellen Base-Images (z.B. des Python-Interpreters) oder von Stand-alone-Software wie PostgreSQL sehen aus unersichtlichen Gründen bisher davon ab, minimale Images zu erstellen.Stattdessen haben sich Drittanbieter darauf spezialisiert – wie Chainguard, Rapidfort, Docker, SecureBuild, Minimus und Bitnami.
Der folgende Abschnitt stellt verschiedene Alternativen zu Base-Image-Alternativen für diverse Runtimes sowie ein schlichtes Basis-Linux vor. Es handelt sich um typische Images, die Anwender im FROM-Statement im Dockerfile angeben, um eigene Anwendungen darauf aufzubauen.
Bei der Recherche nach Alternativen empfiehlt es sich, folgende Auswahlkriterien zu berücksichtigen:
- Baut der Image-Maintainer die minimalen Images regelmäßig neu, z.B. alle paar Tage? Images, bei denen dies nicht der Fall ist, sollte man ignorieren. Der Docker Tag Monitor hilft dabei, die Rebuild-Frequenz bestimmter Image-Tags zu ermitteln (weitere Details finden sich in diesem Blogeintrag des Autors).
- Sind die Images kryptografisch signiert, z. B. mit Cosign? Falls nicht, lässt sich nicht überprüfen, ob das Image manipuliert wurde.
- Können Schwachstellenscanner (wie Trivy) die Komponenten korrekt identifizieren und mit Schwachstellendatenbanken abgleichen? Falls nicht, bleibt unklar, ob das minimale Image etwaige Schwachstellen enthält (siehe Teil 1 dieser Serie).
Alle im Folgenden vorgestellten Images erfüllen die Kriterien – andernfalls weist der Artikel auf Ausnahmen explizit hin. Die Tabelle unten bietet eine Übersicht der auf dem Markt verfügbaren Hersteller (Spalten 2-4) für die verschiedenen Use Cases (Spalte 1):
| Image-Anbieter und Anwendungsfälle im Vergleich | ||||
| Use case | Google Distroless | WolfiOS / Chainguard | Ubuntu Chiseled | Weitere |
| Basis-Linux | ✅ (4 Varianten) | ✅ (2 gratis Varianten, 1 Bezahl-Variante die aber gratis selbst gebaut werden kann) | ⚠️ (nur bei Eigenbau) | — |
| PHP | ❌ | ✅ (neueste Upstream-Version) | ❌ | — |
| Python | ✅ (v3.11, kein ctypes Support) | ✅ (neueste Upstream-Version) |
✅ (v3.10, v3.12) ⚠️ (v3.13 bei Eigenbau für Ubuntu 25.04) |
— |
| Java | ✅ (v17, v21) | ✅ (neueste Upstream-Version) | ✅ (v8, v11, v17, v21) | jlink |
| C# / .NET | ❌ | ✅ (neueste Upstream-Version) | ✅ (.NET v6-10, von Microsoft) | — |
| Node.js | ✅ (v20, v22) | ✅ (neueste Upstream-Version) |
⚠️ (v18, ist End-Of-Life ⚠️ (v20.18.1 bei Eigenbau für Ubuntu 25.04) |
— |
Entwicklung & Code
Red Hat integriert Nvidia CUDA in Enterprise-Linux und OpenShift
Red Hat und Nvidia haben eine erweiterte Partnerschaft angekündigt, die das CUDA-Toolkit direkt in Red Hats Produktportfolio integriert. Entwickler können künftig über die offiziellen Repositories von Red Hat Enterprise Linux (RHEL), OpenShift und Red Hat AI auf die essenziellen Werkzeuge für GPU-beschleunigte Anwendungen zugreifen. Das soll die Installation vereinfachen und Abhängigkeiten automatisch auflösen.
Weiterlesen nach der Anzeige
Die Integration adressiert eine zentrale Herausforderung beim Einsatz von KI-Systemen in Unternehmensumgebungen: die operative Komplexität beim Zusammenspiel verschiedener Komponenten. Entwickler müssen bislang einigen Aufwand betreiben, um kompatible Treiber zu identifizieren, Abhängigkeiten zu managen und Workloads zuverlässig auf unterschiedlichen Systemen zum Laufen zu bringen. Durch die direkte Distribution über Red Hats Plattformen entfällt dieser Integrationsaufwand weitgehend.
Das CUDA-Toolkit umfasst Compiler, Bibliotheken und Entwicklerwerkzeuge für die Programmierung auf Nvidia-GPUs. Die Bereitstellung erfolgt nun über einen einheitlichen, getesteten Software-Stack, der laut Red Hat eine konsistente Umgebung für KI-Workloads bietet – unabhängig davon, ob diese lokal, in Public Clouds oder am Edge betrieben werden. Dieser Ansatz entspricht Red Hats bisheriger Hybrid-Cloud-Strategie.
Red Hat betont den Open-Source-Charakter der Zusammenarbeit. Das Unternehmen positioniert sich als Brücke zwischen der Open-Hybrid-Cloud und Nvidias KI-Plattform, ohne dabei ein geschlossenes Ökosystem aufzubauen. Die Integration soll Unternehmen die Wahlfreiheit bei Tools und Technologien erhalten, während gleichzeitig eine stabile und sichere Plattform bereitgestellt wird.
Details zur Verfügbarkeit und zum genauen Zeitplan der Integration nannte Red Hat in der Ankündigung nicht.
(fo)
Entwicklung & Code
Eclipse ADL: Standardisierte Sprache für Entwurf und Steuerung von KI-Agenten
Die Eclipse Foundation hat eine offene, dezidierte Beschreibungssprache für die Planung, die Definition von Verhaltensmustern und die Steuerung von KI-Agentensystemen vorgestellt. Agent Definition Language (ADL) beschreibt Agentensysteme in einfachen, standardisierten Kategorien und Begrifflichkeiten, die ein strukturiertes Deployment und einen geregelten Betrieb ermöglichen sollen.
Weiterlesen nach der Anzeige
Laut der Ankündigung von Eclipse ist ein solcher offener und transparenter Standard im Markt bisher nicht vorhanden, der es Unternehmen ermöglicht, hersteller- und modellunabhängige Agentensysteme einzuführen und zu unterhalten.
Sprachlich gelenkte Anwendungsfälle
Im Konzept trennt ADL die Definition von Agentensystemen vom konkreten Prompting, wobei der Entwurf mit ADL in den Fachabteilungen geschieht, während im Idealfall ein Compiler die Umsetzung automatisiert in Prompts vollzieht und für die Lösung der Aufgabe benötigte Tools einbindet.

ADL trennt die Beschreibung von Agenten vom Prompting, das ein Compiler umsetzt.
Begrifflich gliedert die Sprache die Agenten in Use Cases ein, innerhalb derer sich verschiedene Szenarien ereignen. Hier agieren Nutzer mit Agenten oder Agenten untereinander. Die formalen Definitionen umfassen dabei:
- UseCase Name: Eine prägnante, beschreibende Kennung, die den Anwendungsfall eindeutig identifiziert.
- Description: Eine detaillierte Erläuterung der Situation oder Anfragen der Nutzerinnen und Nutzer.
- Steps (optional): Eine Abfolge von Schritten, die der Agent ausführen muss, bevor er die endgültige Lösung bereitstellt.
- Solution: Die empfohlene Lösung, um die Anfrage zu erfüllen.
- Alternative Solution (optional): Eine alternative Lösung, die der Agent ausprobieren sollte, wenn der erste Vorschlag scheitert.
- Fallback Solution (optional): Diese finale Ausweichmöglichkeit soll verhindern, dass der Agent in einer Schleife hängen bleibt, in der er immer wieder dieselben Vorschläge anbietet.
- Examples (optional): Dieser Abschnitt stellt zusätzlichen Kontext bereit.
Weiterlesen nach der Anzeige
Im Code:
### UseCase: password_reset
#### Description
Customer has forgotten their password and needs to reset it.
#### Steps
- Ask the customer for their registered email address.
- Send a password reset link to the provided email address.
#### Solution
Guide the customer through the password reset process defined on the webpage
#### Fallback Solution
If the customer cannot access their email, escalate the issue to a higher tier of support.
#### Examples
- I forgot my password.
Weitere Elemente sind beispielsweise Flow Options, mit denen Anwenderinnen und Anwender Entscheidungsbäume implementieren:
[option 1] command[option 2] command 2
Zum Ausprobieren bietet Eclipse einen Playground, in dem bereits ein erster Use Case „Automobile Example“ hinterlegt ist. Tiefergehende Infos finden sich in der technischen Doku.

Der Playground enthält bereits ein Beispiel für eine Anwendung mit ADL.
Teil einer offenen Agentenplattform
ADL bettet sich als Konzept in die Eclipse-Agentenplattform Language Model Operating System (LMOS), die zwei weitere Komponenten enthält: das ARC Agent Framework und die LMOS-Plattform. ARC bietet ein JVM-natives Framework mit Kotlin-Laufzeitumgebung zum Entwickeln, Testen und Erweitern von KI-Agenten mit visueller Schnittstelle. Diese hat ADL bereits implementiert.
Die LMOS-Plattform befindet sich noch im Alphastadium und soll als offene Orchestrierungsschicht für die Infrastruktur dienen und basiert auf den Open-Source-Tools aus dem Ökosystem der CNCF (Cloud Native Computing Foundation). LMOS ist bereits bei der Telekom als Basis für den Chatbot „Frag Magenta“ im Einsatz.
(who)
Entwicklung & Code
programmier.bar: Call for Papers mit Mirjam Aulbach
Der Call for Papers – oder Proposals/Participation – (CfP) entscheidet, welche Stimmen auf einer Konferenz gehört werden und welche nicht. Was passiert zwischen Einreichung und Entscheidung? Wer trifft die Auswahl und nach welchen Kriterien?
Weiterlesen nach der Anzeige
Mirjam Aulbach kennt den CfP aus beiden Perspektiven: von der Bühne und aus dem Programmbeirat, etwa bei der enterJS. Sie hat auf unzähligen Konferenzen präsentiert und war unter den Entscheiderinnen und Entscheidern diverser Konferenzen. Sie erklärt, warum ein CfP so wichtig ist und welche sonstigen Wege es für die Speaker-Akquise gibt. Gemeinsam mit Garrelt Mock und Jan Gregor Emge-Triebel spricht sie über die Herausforderung, faire Prozesse zu gestalten und warum am Ende trotzdem Kompromisse nötig sind.
(Bild: jaboy/123rf.com)

Call for Proposals für die enterJS 2026 am 16. und 17. Juni in Mannheim: Die Veranstalter iX und dpunkt.verlag suchen nach Vorträgen und Workshops rund um JavaScript und TypeScript, Frameworks, Tools und Bibliotheken, Security, UX und mehr. Seit 2021 ist Mirjam Aulbach im Programmbeirat.
Zum Abschluss teilt Mirjam Aulbach ihre besten Tipps für alle, die schon länger mit dem Gedanken spielen, selbst einen Talk bei einer Konferenz einzureichen, und noch auf den richtigen Moment gewartet haben.
Empfohlener redaktioneller Inhalt
Mit Ihrer Zustimmung wird hier ein externer Inhalt geladen.
Die aktuelle Ausgabe des Podcasts steht auch im Blog der programmier.bar bereit: „Call for Papers mit Mirjam Aulbach„. Fragen und Anregungen gerne per Mail oder via Mastodon, Bluesky, LinkedIn oder Instagram.
(mai)
-
UX/UI & Webdesignvor 2 MonatenDer ultimative Guide für eine unvergessliche Customer Experience
-
UX/UI & Webdesignvor 2 MonatenAdobe Firefly Boards › PAGE online
-
Social Mediavor 2 MonatenRelatable, relevant, viral? Wer heute auf Social Media zum Vorbild wird – und warum das für Marken (k)eine gute Nachricht ist
-
UX/UI & Webdesignvor 2 WochenIllustrierte Reise nach New York City › PAGE online
-
Entwicklung & Codevor 2 MonatenPosit stellt Positron vor: Neue IDE für Data Science mit Python und R
-
Entwicklung & Codevor 2 MonatenEventSourcingDB 1.1 bietet flexiblere Konsistenzsteuerung und signierte Events
-
UX/UI & Webdesignvor 1 MonatFake It Untlil You Make It? Trifft diese Kampagne den Nerv der Zeit? › PAGE online
-
Apps & Mobile Entwicklungvor 2 MonatenGalaxy Tab S10 Lite: Günstiger Einstieg in Samsungs Premium-Tablets
