Wie wählst du ein Docker-Basis-Image aus?
Dieser Artikel wurde mit ChatGPT automatisch aus dem Englischen ins Deutsche übersetzt.
TLDR; Größe, Sicherheit und Kompatibilität bilden die Grundlage für die Wahl des passenden Docker-Images für deine Anwendung. In diesem Artikel lernst du, wie du unter Berücksichtigung dieser Aspekte das richtige Basis-Image auswählst.
Was ist ein Docker-Basis-Image?
Ein Docker-Basis-Image ist der Ausgangspunkt zum Erstellen eines Docker-Images. Das klingt zunächst verwirrend. Vielleicht fragst du dich: „Warum brauche ich ein Docker-Image, um ein Docker-Image zu bauen? Ist das ein Henne-Ei-Problem?“ Ja und nein. Es gibt zwei Möglichkeiten: FROM scratch oder auf Grundlage eines bereits gebauten Images. Stell dir dein Docker-Image wie eine Leinwand vor: Du kannst mit einer leeren beginnen oder auf einer bereits gestalteten weitermalen. Wenn du ein vorhandenes Image verwendest, begegnet dir auch der Begriff Parent-Image. In der offiziellen Docker-Terminologie heißen nur Images, die mit FROM scratch beginnen, Basis-Images. Images, auf denen andere Images aufbauen, heißen Parent-Images. In der Community werden diese Begriffe allerdings oft austauschbar verwendet. Die meisten Entwickler sprechen von Basis-Images. Auch wir verwenden diesen Begriff hier allgemein für unsere Ausgangs-Images.
Welche bewährten Praktiken helfen bei Auswahl und Pflege von Docker-Basis-Images?
- Anforderungen klären: Verstehe die Anforderungen deiner Anwendung an Größe, Leistung und Kompatibilität.
- Sicherheit priorisieren: Wähle Images aus vertrauenswürdigen, angesehenen Quellen und achte auf regelmäßige Updates. Suche auf Docker Hub nach dem Kennzeichen Docker Official Image.
- Schlank bleiben: Wähle Basis-Images, die nur das Nötige enthalten, um Größe und Sicherheitsrisiken zu reduzieren. Nutze Images auf Alpine-Basis oder scratch, wenn du eine einzelne Binärdatei hast. Der Zusatz slim weist auf eine reduzierte Image-Variante hin.
- Regelmäßig aktualisieren: Nutze Werkzeuge, um deine Basis-Images kontinuierlich zu überwachen und durch Updates Sicherheitslücken zu schließen.
- Kompatibilität testen: Teste deine Anwendung regelmäßig mit der neuesten Version deines Basis-Images. Verwende nicht standardmäßig latest: Eine neue Image-Version könnte dazu führen, dass deine Anwendung plötzlich nicht mehr funktioniert. Lege eine Version fest und aktualisiere sie regelmäßig.
- Nur bei Bedarf anpassen: Erfinde das Rad nicht neu. Meist kannst du ein vorhandenes Image verwenden. Manchmal ist jedoch ein eigenes Basis-Image notwendig, das auf die besonderen Anforderungen deiner Anwendung zugeschnitten ist.
Wie beeinflusst die Größe die Wahl eines Docker-Basis-Images?
Die Größe eines Docker-Basis-Images spielt eine wichtige Rolle für die Leistung und Deployment-Geschwindigkeit deiner Anwendung. Größere Images wie Ubuntu benötigen mehr Zeit zum Herunterladen und mehr Speicherplatz. Das kann bei begrenzten Ressourcen oder hohen Kosten relevant sein. Kleinere Images wie Alpine Linux sind schlanker und schneller bereitzustellen. Sie eignen sich daher für Anwendungen, die schnell skaliert oder ausgerollt werden sollen.
- Downloadzeit: Je größer das Image, desto länger dauert der Download, besonders bei langsamen Verbindungen oder begrenzter Bandbreite. Berücksichtige das auch in deiner CI/CD-Pipeline.
- Speicherplatz: Größere Images belegen mehr Platz. Das ist bei begrenzter Kapazität wichtig, etwa auf IoT-Geräten wie Drohnen, Satelliten oder intelligenten Kühlschränken, sowie in Cloud-Umgebungen, in denen Speicher Kosten verursacht.
- Startzeit: Kleinere Images können die Zeit bis zum Containerstart verkürzen, insbesondere wenn das Image zuvor heruntergeladen werden muss, und so Deployments beschleunigen.
Warum ist Sicherheit bei der Wahl eines Docker-Basis-Images entscheidend?
Das Docker-Basis-Image ist das Fundament deiner Anwendung und prägt deren Sicherheit. Für eine fundierte Entscheidung solltest du verschiedene Faktoren berücksichtigen.
- Grundlage: Ist das Basis-Image unsicher, kann sich das auch auf die darin ausgeführte Anwendung auswirken.
- Weniger Schwachstellen: Jedes Docker-Image kann Sicherheitslücken enthalten. Wähle deshalb ein Image, das regelmäßig Sicherheitsupdates erhält. Wurde es lange nicht aktualisiert, solltest du es nicht verwenden.
- Kleine Angriffsfläche: Ungenutzte Pakete vergrößern die Angriffsfläche. Du musst dann auch Pakete überwachen und aktualisieren, die deine Anwendung gar nicht braucht. Kleinere Basis-Images können deshalb sicherer sein.
- Compliance: In vielen Branchen müssen Anwendungen bestimmte Sicherheitsstandards und Vorschriften erfüllen. Dafür kann ein eigenes Docker-Basis-Image notwendig sein.
- Vertrauenswürdige Quellen: Achte auf die Herkunft deiner Images. Auf Docker Hub erkennst du offizielle Images am Kennzeichen Docker Official Image. Vertrauenswürdige Anbieter achten auf Sicherheit, prüfen regelmäßig auf Schwachstellen und veröffentlichen Updates und Patches. Weitere Informationen findest du bei Docker Trusted Content.

- Kompatibilität: Für eine Node.js-Anwendung solltest du ein zur Programmiersprache passendes Image verwenden. Ein Python-Image für eine Node.js-Anwendung würde zusätzliche Pakete und Bibliotheken mitbringen, die du nicht brauchst, und damit die Angriffsfläche vergrößern.
Welche verbreiteten Docker-Basis-Images gibt es und was sind ihre Vorteile?
- Alpine: Bekannt für seine geringe Größe und Sicherheitsfunktionen. Geeignet für schlanke Anwendungen mit besonderem Augenmerk auf Sicherheit.
- Ubuntu: Bietet einen Kompromiss zwischen Funktionsumfang und Größe. Umfangreiche Paketquellen und Unterstützung machen es zu einer verbreiteten Wahl.
- Node, Golang, Python, …: Viele offizielle Images sind auf eine Programmiersprache zugeschnitten. Entwickelst du mit Node.js, ziehe das offizielle Node-Image in Betracht. Häufig gibt es schlanke Varianten wie Node Alpine, Python Slim oder Golang Alpine.
- Postgres, RabbitMQ, Redis, …: Viele Open-Source-Anwendungen wie Datenbanken, In-Memory-Datenbanken und Message-Broker bieten offizielle Images. Prüfe diese, bevor du eigene Images für solche Dienste konfigurierst.
- Scratch: Der minimale Ausgangspunkt zum Erstellen möglichst kleiner Container. Dieses Image ist leer. Es eignet sich für spezialisierte, minimalistische Anwendungen, etwa eine einzelne Binärdatei, die bereits alle Abhängigkeiten enthält. Auch allgemeine Basis-Images wie Alpine und Ubuntu bauen darauf auf.
Was bedeutet FROM scratch in Docker und wann verwendest du es?
Wenn du eine Binärdatei mit allen benötigten Abhängigkeiten hast oder kein vorhandenes Image passt, kannst du mit scratch beginnen. Du musst dann alle benötigten Bestandteile des Dateisystems und alle Pakete selbst bereitstellen. Viele Basis-Images wie die offiziellen Images für Alpine, Debian und Busybox beginnen mit FROM scratch. Images wie NGINX bauen wiederum auf solchen Basis-Images auf. Beispielsweise verwendet eine Variante des offiziellen NGINX-Images Debian als Grundlage. Du kannst dann NGINX als Basis für deine Webanwendung nutzen. In diesem Sinne führen alle Wege zu scratch.
Muss ich das Scratch-Basis-Image verwenden?
Meist möchten wir unsere Anwendung in einer Umgebung ausführen, in der sie zuverlässig läuft. Dafür beginnen wir normalerweise nicht mit FROM scratch. Eine Ausnahme ist beispielsweise eine Binärdatei, die keine Systempakete benötigt. Dann kann FROM scratch sinnvoll sein, weil es ein besonders kleines Image mit sehr geringer Angriffsfläche ermöglicht.
Fazit
Das passende Docker-Basis-Image ist entscheidend für Leistung, Sicherheit und Kompatibilität deiner Anwendung. Die Wahl beeinflusst die technische Grundlage deines Projekts und sollte sich an den konkreten Anforderungen und der Betriebsumgebung orientieren. Wähle ein schlankes, sicheres und regelmäßig aktualisiertes Image, damit deine containerisierte Anwendung über ihren gesamten Lebenszyklus robust, effizient und sicher bleibt.
Wenn du Unterstützung bei der Containerisierung brauchst, kontaktiere uns gerne. Oder komm für Fragen und Diskussionen in unsere neue Community – kostenlose Kekse für die ersten 42 Mitglieder, und nur noch 6 sind übrig 😱!
Komm in unsere CommunityHat dir dieser Artikel gefallen? Teile ihn mit deinen Kolleginnen, Kollegen und Freunden.
Melde dich für unseren Newsletter an!
Verpasse keine neuen Tipps, Anleitungen und Updates – melde dich jetzt für unseren Newsletter an! Wir schicken dir nur relevante und hilfreiche Informationen. Entdecke mit uns die Welt von Docker und darüber hinaus.
Mit deiner Anmeldung akzeptierst du die Datenschutzerklärung. Du kannst dich jederzeit über den Link am Ende unserer E-Mails abmelden.
