Computerhaus Quickborn

Docker Images für schlanke Container​

Leichtgewichtige Container leichtgemacht.udzign | shutterstock.com Ein Docker Image enthält typischerweise alles, was man braucht, um eine (spezifische) Software auszuführen (etwa die Runtime der Anwendungssprache). Alles, was über eine statische Binärdatei hinausgeht, weist zudem Abhängigkeiten auf – die ebenfalls in das Container-Image gehören. Entsprechend umfangreich können die Images am Ende werden: Mehrere hundert MB sind dabei keine Seltenheit – schließlich dient eine Linux-Distribution als Basis. Besonders schlanke Docker Images zu verwenden, hat dabei nicht nur den Vorteil, dass weniger Speicherplatz in Anspruch genommen wird. Solche asketischen Images: bieten ganz allgemein eine kleinere Angriffsfläche, werfen weniger Abhängigkeiten auf, die gemanagt werden müssen, und lassen sich deutlich schneller erstellen. In diesem Artikel werfen wir einen Blick auf vier besonders nützliche (und kleine) Docker-Basis-Images – sowie ein Repository, um mit leichtgewichtigen Containern zu experimentieren. 1. Alpine Alpine Linux ist eine kleine und leichtgewichtige Lösung mit Security-Fokus für eingebettete Hardware und dedizierte Devices. Das offizielle Image von Alpine Linux ist lediglich 5 MB groß.   Der Minimalismus von Alpine ist in erste Linie darauf zurückzuführen, dass musl-libc verwendet wird – eine statisch verlinkte Version der libc-Runtime. Darüber hinaus nutzt Alpine auch BusyBox (siehe Punkt 2), um die Dinge kompakt zu halten. Im Gegensatz zu vielen anderen, besonders kleinen Linux-Distros enthält Alpine mit apk auch einen Package Manager. Ein Nachteil bei Alpine Linux: Für Anwendungen, die die konventionelle glibc-Laufzeit nutzen, ist es unbrauchbar. Davon abgesehen kann musl-libc auch die Performance beeinträchtigen, was bei Applikationen, die besonders schnell reagieren sollen, kontraproduktiv ist. 2. BusyBox Wenn Sie ein noch kleineres Image benötigen, können Sie dieses auch direkt mit BusyBox aufbauen – einer der Komponenten von Alpine Linux. Das kompakte Standalone-Executable ist zwischen 1 und 5 MB groß und bündelt die (simplifizierten) Versionen einer ganzen Reihe gängiger Linux-Tools. Zum Beispiel, um: Dateien zu archivieren, E-Mails zu versenden, Prozesse zu verändern, Festplatten zu durchsuchen oder Volume-Handling-Tasks abzuarbeiten. Diese Werkzeuge stellen zwar keinen 1:1-Ersatz für die originalen (nicht vereinfachten) Tools dar – sollten jedoch den Großteil der alltäglich benötigten Funktionalitäten abdecken. BusyBox enthält darüber hinaus auch den HTTP-Server httpd, der sich sehr gut dazu eignet, statische Inhalte bereitzustellen. Der Softwareentwickler Florian Lipan geht an dieser Stelle noch einen Schritt weiter und hat ein BusyBox-Image erstellt, das auf statische Webseiten optimiert ist.  BusyBox steht in verschiedenen Varianten zur Verfügung, die unterschiedliche Implementierungen von libc nutzen: musl-libc (wie bei Alpine Linux), das konventionelle glibc sowie uclibc. 3. Debian Slim & minideb Sollten Sie Debian Linux als Basis für Ihre Applikationen verwenden, empfiehlt sich die Minimalvariante dieser Distribution – Debian Slim. Im Vergleich zur vollständigen Version verzichtet die schlanke Debian-Distribution im Wesentlichen auf: Dokumentation, Support für andere Sprachen als Englisch, sowie einige Applikations-spezifische Komponenten. Allein dadurch reduziert sich die Größe von Debian Slim (im Vergleich zu Debian Linux) um circa 40 Prozent: Das Image ist knapp 36 MB groß. Eine andere Option auf Debian-Basis ist minideb von Bitnami. Die Images für diese Distribution erhalten täglich Sicherheits-Updates und verzichten ähnlich wie Debian Slim auf Dokumentation sowie die mit einige Komponenten. Sie enthalten jedoch ein benutzerdefiniertes install_packages-Skript, mit dem apt nicht-interaktiv während des Container-Build-Prozesses ausgeführt werden kann. Das minideb-Image dient diversen eigenen, Language-Runtime-Containern (PHP, Ruby, Node) und Infrastrukturanwendungen (Redis, MariaDB) von Bitnami als Basis. 4. Red Hat UBIs Red Hat stellt ein ganzes Set von Container-Images auf Basis von Red Hat Enterprise Linux (RHEL) zur Verfügung – die sogenannten Universal Base Images (UBIs). Diese (sowie sämtliche Images, die damit erstellt werden) unterliegen dem UBI-EULA (PDF) und beinhalten RHEL in den Versionen 8 bis 10. Die beiden kleinsten UBIs sind die Micro– (27 MB) und die Minimal-Version (90 MB). Sie verzichten auf Komponenten wie Language Runtimes sowie Initialisierungs- und Service-Management-Tools wie systemd. Das Micro-UBI hat nicht einmal einen Packet Manager an Bord und eignet sich deshalb am besten für Anwendungen, bei denen Sie Ihre eigenen Abhängigkeiten bereitstellen. Das Minimal-UBI bringt eine kleine Teilmenge herkömmlicher Abhängigkeiten und einen minimalen Packet Manager (microdnf) mit. Das ist nützlich, wenn Sie im Rahmen des Image-Build-Prozesses zusätzliche Komponenten aus den Red-Hat-Repositories abrufen möchten. 5. Minimage Repository Abschließend werfen wir noch einen Blick auf das umfangreiche Repository, das Softwareentwickler Jérôme Petazzoni auf die Beine gestellt hat. Dieses enthält zahlreiche experimentelle, minimale Docker-Beispiel-Images für verschiedene Tasks sowie Language Runtimes und nutzt diverse Distributionen als Basis. Eine Vielzahl dieser Beispiele ist allerdings nicht funktional – sie dienen lediglich dazu, die Auswirkungen zu veranschaulichen, die unterschiedliche Kombinationen von Build-Prozessschritten nach sich ziehen. Allerdings lassen sich die experimentellen Docker-Images als Ausgangspunkt nutzen, um eigene, besonders schlanke Container auf die Beine zu stellen. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox! 

Docker Images für schlanke Container​ Leichtgewichtige Container leichtgemacht.udzign | shutterstock.com Ein Docker Image enthält typischerweise alles, was man braucht, um eine (spezifische) Software auszuführen (etwa die Runtime der Anwendungssprache). Alles, was über eine statische Binärdatei hinausgeht, weist zudem Abhängigkeiten auf – die ebenfalls in das Container-Image gehören. Entsprechend umfangreich können die Images am Ende werden: Mehrere hundert MB sind dabei keine Seltenheit – schließlich dient eine Linux-Distribution als Basis. Besonders schlanke Docker Images zu verwenden, hat dabei nicht nur den Vorteil, dass weniger Speicherplatz in Anspruch genommen wird. Solche asketischen Images: bieten ganz allgemein eine kleinere Angriffsfläche, werfen weniger Abhängigkeiten auf, die gemanagt werden müssen, und lassen sich deutlich schneller erstellen. In diesem Artikel werfen wir einen Blick auf vier besonders nützliche (und kleine) Docker-Basis-Images – sowie ein Repository, um mit leichtgewichtigen Containern zu experimentieren. 1. Alpine Alpine Linux ist eine kleine und leichtgewichtige Lösung mit Security-Fokus für eingebettete Hardware und dedizierte Devices. Das offizielle Image von Alpine Linux ist lediglich 5 MB groß.   Der Minimalismus von Alpine ist in erste Linie darauf zurückzuführen, dass musl-libc verwendet wird – eine statisch verlinkte Version der libc-Runtime. Darüber hinaus nutzt Alpine auch BusyBox (siehe Punkt 2), um die Dinge kompakt zu halten. Im Gegensatz zu vielen anderen, besonders kleinen Linux-Distros enthält Alpine mit apk auch einen Package Manager. Ein Nachteil bei Alpine Linux: Für Anwendungen, die die konventionelle glibc-Laufzeit nutzen, ist es unbrauchbar. Davon abgesehen kann musl-libc auch die Performance beeinträchtigen, was bei Applikationen, die besonders schnell reagieren sollen, kontraproduktiv ist. 2. BusyBox Wenn Sie ein noch kleineres Image benötigen, können Sie dieses auch direkt mit BusyBox aufbauen – einer der Komponenten von Alpine Linux. Das kompakte Standalone-Executable ist zwischen 1 und 5 MB groß und bündelt die (simplifizierten) Versionen einer ganzen Reihe gängiger Linux-Tools. Zum Beispiel, um: Dateien zu archivieren, E-Mails zu versenden, Prozesse zu verändern, Festplatten zu durchsuchen oder Volume-Handling-Tasks abzuarbeiten. Diese Werkzeuge stellen zwar keinen 1:1-Ersatz für die originalen (nicht vereinfachten) Tools dar – sollten jedoch den Großteil der alltäglich benötigten Funktionalitäten abdecken. BusyBox enthält darüber hinaus auch den HTTP-Server httpd, der sich sehr gut dazu eignet, statische Inhalte bereitzustellen. Der Softwareentwickler Florian Lipan geht an dieser Stelle noch einen Schritt weiter und hat ein BusyBox-Image erstellt, das auf statische Webseiten optimiert ist.  BusyBox steht in verschiedenen Varianten zur Verfügung, die unterschiedliche Implementierungen von libc nutzen: musl-libc (wie bei Alpine Linux), das konventionelle glibc sowie uclibc. 3. Debian Slim & minideb Sollten Sie Debian Linux als Basis für Ihre Applikationen verwenden, empfiehlt sich die Minimalvariante dieser Distribution – Debian Slim. Im Vergleich zur vollständigen Version verzichtet die schlanke Debian-Distribution im Wesentlichen auf: Dokumentation, Support für andere Sprachen als Englisch, sowie einige Applikations-spezifische Komponenten. Allein dadurch reduziert sich die Größe von Debian Slim (im Vergleich zu Debian Linux) um circa 40 Prozent: Das Image ist knapp 36 MB groß. Eine andere Option auf Debian-Basis ist minideb von Bitnami. Die Images für diese Distribution erhalten täglich Sicherheits-Updates und verzichten ähnlich wie Debian Slim auf Dokumentation sowie die mit einige Komponenten. Sie enthalten jedoch ein benutzerdefiniertes install_packages-Skript, mit dem apt nicht-interaktiv während des Container-Build-Prozesses ausgeführt werden kann. Das minideb-Image dient diversen eigenen, Language-Runtime-Containern (PHP, Ruby, Node) und Infrastrukturanwendungen (Redis, MariaDB) von Bitnami als Basis. 4. Red Hat UBIs Red Hat stellt ein ganzes Set von Container-Images auf Basis von Red Hat Enterprise Linux (RHEL) zur Verfügung – die sogenannten Universal Base Images (UBIs). Diese (sowie sämtliche Images, die damit erstellt werden) unterliegen dem UBI-EULA (PDF) und beinhalten RHEL in den Versionen 8 bis 10. Die beiden kleinsten UBIs sind die Micro– (27 MB) und die Minimal-Version (90 MB). Sie verzichten auf Komponenten wie Language Runtimes sowie Initialisierungs- und Service-Management-Tools wie systemd. Das Micro-UBI hat nicht einmal einen Packet Manager an Bord und eignet sich deshalb am besten für Anwendungen, bei denen Sie Ihre eigenen Abhängigkeiten bereitstellen. Das Minimal-UBI bringt eine kleine Teilmenge herkömmlicher Abhängigkeiten und einen minimalen Packet Manager (microdnf) mit. Das ist nützlich, wenn Sie im Rahmen des Image-Build-Prozesses zusätzliche Komponenten aus den Red-Hat-Repositories abrufen möchten. 5. Minimage Repository Abschließend werfen wir noch einen Blick auf das umfangreiche Repository, das Softwareentwickler Jérôme Petazzoni auf die Beine gestellt hat. Dieses enthält zahlreiche experimentelle, minimale Docker-Beispiel-Images für verschiedene Tasks sowie Language Runtimes und nutzt diverse Distributionen als Basis. Eine Vielzahl dieser Beispiele ist allerdings nicht funktional – sie dienen lediglich dazu, die Auswirkungen zu veranschaulichen, die unterschiedliche Kombinationen von Build-Prozessschritten nach sich ziehen. Allerdings lassen sich die experimentellen Docker-Images als Ausgangspunkt nutzen, um eigene, besonders schlanke Container auf die Beine zu stellen. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!

Leichtgewichtige Container leichtgemacht.udzign | shutterstock.com Ein Docker Image enthält typischerweise alles, was man braucht, um eine (spezifische) Software auszuführen (etwa die Runtime der Anwendungssprache). Alles, was über eine statische Binärdatei hinausgeht, weist zudem Abhängigkeiten auf – die ebenfalls in das Container-Image gehören. Entsprechend umfangreich können die Images am Ende werden: Mehrere hundert MB sind dabei keine Seltenheit – schließlich dient eine Linux-Distribution als Basis. Besonders schlanke Docker Images zu verwenden, hat dabei nicht nur den Vorteil, dass weniger Speicherplatz in Anspruch genommen wird. Solche asketischen Images: bieten ganz allgemein eine kleinere Angriffsfläche, werfen weniger Abhängigkeiten auf, die gemanagt werden müssen, und lassen sich deutlich schneller erstellen. In diesem Artikel werfen wir einen Blick auf vier besonders nützliche (und kleine) Docker-Basis-Images – sowie ein Repository, um mit leichtgewichtigen Containern zu experimentieren. 1. Alpine Alpine Linux ist eine kleine und leichtgewichtige Lösung mit Security-Fokus für eingebettete Hardware und dedizierte Devices. Das offizielle Image von Alpine Linux ist lediglich 5 MB groß.   Der Minimalismus von Alpine ist in erste Linie darauf zurückzuführen, dass musl-libc verwendet wird – eine statisch verlinkte Version der libc-Runtime. Darüber hinaus nutzt Alpine auch BusyBox (siehe Punkt 2), um die Dinge kompakt zu halten. Im Gegensatz zu vielen anderen, besonders kleinen Linux-Distros enthält Alpine mit apk auch einen Package Manager. Ein Nachteil bei Alpine Linux: Für Anwendungen, die die konventionelle glibc-Laufzeit nutzen, ist es unbrauchbar. Davon abgesehen kann musl-libc auch die Performance beeinträchtigen, was bei Applikationen, die besonders schnell reagieren sollen, kontraproduktiv ist. 2. BusyBox Wenn Sie ein noch kleineres Image benötigen, können Sie dieses auch direkt mit BusyBox aufbauen – einer der Komponenten von Alpine Linux. Das kompakte Standalone-Executable ist zwischen 1 und 5 MB groß und bündelt die (simplifizierten) Versionen einer ganzen Reihe gängiger Linux-Tools. Zum Beispiel, um: Dateien zu archivieren, E-Mails zu versenden, Prozesse zu verändern, Festplatten zu durchsuchen oder Volume-Handling-Tasks abzuarbeiten. Diese Werkzeuge stellen zwar keinen 1:1-Ersatz für die originalen (nicht vereinfachten) Tools dar – sollten jedoch den Großteil der alltäglich benötigten Funktionalitäten abdecken. BusyBox enthält darüber hinaus auch den HTTP-Server httpd, der sich sehr gut dazu eignet, statische Inhalte bereitzustellen. Der Softwareentwickler Florian Lipan geht an dieser Stelle noch einen Schritt weiter und hat ein BusyBox-Image erstellt, das auf statische Webseiten optimiert ist.  BusyBox steht in verschiedenen Varianten zur Verfügung, die unterschiedliche Implementierungen von libc nutzen: musl-libc (wie bei Alpine Linux), das konventionelle glibc sowie uclibc. 3. Debian Slim & minideb Sollten Sie Debian Linux als Basis für Ihre Applikationen verwenden, empfiehlt sich die Minimalvariante dieser Distribution – Debian Slim. Im Vergleich zur vollständigen Version verzichtet die schlanke Debian-Distribution im Wesentlichen auf: Dokumentation, Support für andere Sprachen als Englisch, sowie einige Applikations-spezifische Komponenten. Allein dadurch reduziert sich die Größe von Debian Slim (im Vergleich zu Debian Linux) um circa 40 Prozent: Das Image ist knapp 36 MB groß. Eine andere Option auf Debian-Basis ist minideb von Bitnami. Die Images für diese Distribution erhalten täglich Sicherheits-Updates und verzichten ähnlich wie Debian Slim auf Dokumentation sowie die mit einige Komponenten. Sie enthalten jedoch ein benutzerdefiniertes install_packages-Skript, mit dem apt nicht-interaktiv während des Container-Build-Prozesses ausgeführt werden kann. Das minideb-Image dient diversen eigenen, Language-Runtime-Containern (PHP, Ruby, Node) und Infrastrukturanwendungen (Redis, MariaDB) von Bitnami als Basis. 4. Red Hat UBIs Red Hat stellt ein ganzes Set von Container-Images auf Basis von Red Hat Enterprise Linux (RHEL) zur Verfügung – die sogenannten Universal Base Images (UBIs). Diese (sowie sämtliche Images, die damit erstellt werden) unterliegen dem UBI-EULA (PDF) und beinhalten RHEL in den Versionen 8 bis 10. Die beiden kleinsten UBIs sind die Micro– (27 MB) und die Minimal-Version (90 MB). Sie verzichten auf Komponenten wie Language Runtimes sowie Initialisierungs- und Service-Management-Tools wie systemd. Das Micro-UBI hat nicht einmal einen Packet Manager an Bord und eignet sich deshalb am besten für Anwendungen, bei denen Sie Ihre eigenen Abhängigkeiten bereitstellen. Das Minimal-UBI bringt eine kleine Teilmenge herkömmlicher Abhängigkeiten und einen minimalen Packet Manager (microdnf) mit. Das ist nützlich, wenn Sie im Rahmen des Image-Build-Prozesses zusätzliche Komponenten aus den Red-Hat-Repositories abrufen möchten. 5. Minimage Repository Abschließend werfen wir noch einen Blick auf das umfangreiche Repository, das Softwareentwickler Jérôme Petazzoni auf die Beine gestellt hat. Dieses enthält zahlreiche experimentelle, minimale Docker-Beispiel-Images für verschiedene Tasks sowie Language Runtimes und nutzt diverse Distributionen als Basis. Eine Vielzahl dieser Beispiele ist allerdings nicht funktional – sie dienen lediglich dazu, die Auswirkungen zu veranschaulichen, die unterschiedliche Kombinationen von Build-Prozessschritten nach sich ziehen. Allerdings lassen sich die experimentellen Docker-Images als Ausgangspunkt nutzen, um eigene, besonders schlanke Container auf die Beine zu stellen. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox! 

Nach oben scrollen
×