Netzwerk | Thorsten Eggeling | 02/2026 | 9. Juni 2026

Sichere Anwendungen im Container

Docker bietet eine leistungsfähige Plattform für Server und Webanwendungen. Die Software kann auf Computern im Rechenzentrum zum Einsatz kommen, ist aber auch für private Anwender eine interessante Option.

Docker-Anwendungen laufen isoliert vom Betriebssystem in Containern – inklusive aller erforderlichen Abhängigkeiten. Es besteht keine Gefahr, dass durch die Installation zusätzlicher Bibliotheken oder Tools das Linux-System instabil wird. Das lädt auch zum Ausprobieren ein, weil sich die Container rückstandslos wieder entfernen lassen. Docker verwendet den laufenden Linux-Kernel, weshalb die Anwendungen schnell starten und im Vergleich zu virtuellen Maschinen mit Systemressourcen sparsam umgehen.

Allerdings erfordert Docker Vorbereitungen, und man muss sich mit den Eigenheiten der Konfiguration und Bedienung auseinandersetzen. Dieser Artikel geht mehr auf die technischen Details ein und zeigt die manuelle Einrichtung und Verwaltung von Docker-Anwendungen.

Service: Befehlszeilen und Scripts zu diesem Artikel finden Sie über https://m6u.de/DOCKC.

Docker auf dem PC installieren

Die Standardquellen der meisten Linux-Distributionen stellen Docker bereit, allerdings oft nur eine veraltete Version. Ubuntu-Nutzer können alternativ das aktuellere Snap-Paket verwenden. Für alle Ubuntu-basierten Systeme eignet sich auch das Debian-Repositorium von www.docker.com. Offiziell wird Ubuntu ab Version 22.04 unterstützt, jedoch nicht Linux Mint. Da Linux Mint auf Ubuntu basiert, sollte es damit aber keine Probleme geben – bei unseren Tests sind keine aufgetreten.

Eine Beschreibung der Installation für gängige Linux-Systeme finden Sie unter https://docs.docker.com/engine/install. Für Ubuntu und Linux Mint können Sie das von uns vorbereitete Installations-Script „install-docker.sh“ über https://m6u.de/DOCKC herunterladen. Starten Sie es im Terminal aus dem Downloadverzeichnis mit

bash ./install-docker.sh

Unser Script bindet das Docker-Repositorium in die Paketquellen ein, was die Installation der aktuellen Pakete und automatische Updates ermöglicht. Es fügt außerdem den aktuellen Benutzer zur Gruppe „docker“ hinzu, um diesem die Nutzung zu erlauben. Danach muss ein Linux-Neustart erfolgen, damit die Änderungen wirksam werden.

Docker stets aktuell: Unser Script bindet das Docker-Repositorium ins System ein und startet die Dienste.
Updates erhalten Sie über den Paketmanager Ihres Systems.

Die DEB-Pakete können auch einzeln installiert werden, oder Sie verwenden das Original-Docker-Installations-Script (siehe https://docs.docker.com/engine/install/ubuntu).

Docker läuft standardmäßig mit root-Recht, was auf einem privat genutzten Rechner kein Problem darstellen sollte. Wer Sicherheitsbedenken hat, folgt der Anleitung von https://docs.docker.com/engine/security/rootless und richtet Docker im „Rootless mode“ ein.

Hinweis: Wenn Sie Coolify oder Winboat installiert haben, müssen Sie Docker nicht erneut einrichten. Das Installations-Script von Coolify fügt den Benutzer jedoch nicht zur Gruppe „docker“ hinzu, was Sie im Terminal mit

sudo usermod -aG docker $USER

nachholen können. Ersetzen Sie „$USER“ durch den Benutzernamen weiterer Benutzer, falls diese ebenfalls Zugriff erhalten soll. Benutzer, die nicht zu dieser Gruppe gehören, können Docker-Kommandos nur mit vorangestelltem „sudo“ verwenden.

Wie Docker funktioniert

Docker nutzt Imagedateien, die das Dateisystem einer minimalen Linux-Installation enthalten. Es kann sich dabei um Ubuntu, Debian oder das besonders kleine Alpine Linux handeln. Im Prinzip eignet sich aber jede Linux-Distribution. Die Imagedateien sind komprimiert (in der Regel nur etwa zwischen 5 und 100 MB groß) und belegen auf der Festplatte dann ungefähr 20 bis 200 MB. In diesem Basis-Linux ist nur das Notwendigste enthalten. Über die Paketverwaltung wird gezielt nachinstalliert, was für einen bestimmten Zweck erforderlich ist.

Docker-Entwickler können fertige Images für eine Anwendung bereitstellen, in denen die nötige Software bereits enthalten ist. Die Images sind schreibgeschützt und dienen als Basis für Container, die zusätzliche Software und Anpassungen der Konfiguration enthalten. Docker legt das Dateisystem des Containers über das aus dem Image (Overlay), sodass beide zusammen aus Sicht des Betriebssystems einen Verzeichnisbaum bilden. Der Container selbst enthält nur die Differenz und kann daher sehr klein sein.

Docker-Anwendungen bieten keine grafische Oberfläche, sodass der Zugriff auf einen Container nur im Terminal erfolgen kann. In der Regel laufen jedoch im Container Server oder Dienste, die über das Netzwerk ansprechbar sind, und die Serverdienste lassen sich dann etwa über den Webbrowser nutzen.

Erste Schritte mit Docker

Um das Zusammenspiel von Image und Container auszuprobieren, erstellen Sie einen Container, passen ihn an und erstellen daraus ein neues Image. Dabei lernen Sie die wichtigsten Terminalbefehle für Docker kennen.

Schritt 1: Geben Sie im Terminal folgenden Befehl ein:

docker run -t -i --name ubuntu-test ubuntu:24.04  bash

Die Option „-t“ emuliert ein Terminaldevice für die Shell und „-i“ ermöglicht deren interaktive Nutzung. Der Container erhält die Bezeichnung „ubuntu-test“ und soll auf „ubuntu:24.04“ basieren. „bash“ am Ende der Zeile sorgt für den Start der Bash-Shell.

Schritt 2: Sie befinden sich jetzt im Dateisystem des Containers, was Sie an einem Prompt wie „root@b9fd6679bda0“ erkennen. Die Zeichenfolge hinter „@“ ist die ID des Containers.

Schritt 3: Sie können jetzt alle Programme starten, die im Minimalsystem verfügbar sind. Viele sind das nicht, weshalb Sie über die Paketverwaltung neue Programme hinzufügen, zum Beispiel den Dateimanager Midnight Commander. Dafür starten Sie

apt update && apt -y install mc

Mit dem Dateimanager können Sie sich im Dateisystem umsehen. Drücken Sie die Taste F10, um den Midnight Commander zu beenden. Mit  exit verlassen Sie den Container.

Schritt 4: Der Befehl

docker ps -a

zeigt alle Container an. Sie erkennen den zuvor erstellten Container anhand seiner ID und seinem Namen „ubuntu-test“. Mit

docker start -i ubuntu-test

aktivieren Sie den Container erneut. Statt des Namens können Sie auch die ID verwenden. Der Midnight Commander ist weiterhin vorhanden. Beenden Sie den Container wieder mit exit.

Schritt 5: Aus dem Container erzeugen Sie mit

docker commit ubuntu-test
ubuntu-mit-mc:24.04

ein neues Image mit der Bezeichnung „ubuntu-mit-mc“. Der Befehl

docker image ls

zeigt die installierten Images an. Das sind jetzt „ubuntu:24.04“ und „ubuntu-mit-mc:24.04“.

Schritt 6: Löschen Sie den in Schritt 1 erstellten Container mit

docker rm ubuntu-test

und legen danach einen neuen Container an, diesmal auf Basis von „ubuntu-mit-mc:24.04“:

docker run -t -i --name ubuntu-test-2 ubuntu-mit-mc:24.04 bash

Darin ist jetzt der Midnight Commander bereits enthalten.

Images, die Sie nicht mehr benötigen, entfernen Sie über

docker rmi [Image-Name oder ID]

Das funktioniert nur, wenn Sie zuvor mit „docker rm [Containername oder ID]“ alle Container löschen, die das Image verwenden.

Fremdes Terminal: Der Midnight Commander läuft hier in einem Docker-Container, was im Prompt zu sehen ist. Statt des Rechnernamens erscheint die ID des Containers.

Images mit Dockerfile erstellen

Komplett vorbereitete Imagedateien für Docker erhalten Sie auf https://hub.docker.com. Dort ist alles zu finden, was sich in einem Docker-Container nutzen lässt. Für jede Software gibt es zahlreiche Versionen und Varianten, meist auch auf Basis unterschiedlicher Linux-Distributionen. Den Docker-Hub können beliebige Personen nutzen und Images hochladen. Es ist grundsätzlich nicht auszuschließen, dass sich darunter Software mit Sicherheitslücken oder sogar mit Schadfunktionen befindet. Deswegen gibt es Kategorien wie „Docker Official Image“ und „Verified Publisher“, die eher eine geprüfte Sicherheit versprechen. Wie bei jeder Software sind aber auch hier Fehler nicht auszuschließen. Für mehr Sicherheit sollten Sie darauf achten, dass das Image zumindest vom Originalanbieter stammt. Sie erkennen das, wenn auf der Webseite des Entwicklers eine Anleitung für die Docker-Installation zu finden ist, die auf das Image bei https://hub.docker.com verweist.

Wer den Inhalt einer Imagedatei kontrollieren möchte, erstellt sie am besten selbst. Für ein Basisimage von Ubuntu oder Debian ist das jedoch eine komplexe Aufgabe, weil einige Anpassungen für Docker nötig sind. Den Standardimages kann man jedoch vertrauen, weil sie vom Linux-Distributor stammen.

Imageanpassungen automatisieren: Ein Dockerfile nimmt Befehle auf, über die sich ein neues Image mit zusätzlicher Software und einem Anwendungsstarter erstellen lässt.

Anpassungen in einer Imagedatei können über ein Script erfolgen, das die gewünschten Anweisungen enthält. Bei vielen Projekten auf https://hub.docker.com oder den Webseiten der Softwareentwickler finden Sie auch das zugehörige Script mit dem Namen „Dockerfile“, das Sie untersuchen und anpassen können.

Schritt 1: Für ein Beispiel erstellen Sie eine Textdatei mit dem Namen „Dockerfile“ und dem Inhalt oben aus der Abbildung (Download: https://m6u.de/DOCKC). Hinter „FROM“ steht der Name der Imagedatei, die die Grundlage bilden soll. Danach installiert „RUN“ den Midnight Commander, „COPY“ kopiert die Datei „echo_hello.sh“ in das Hauptverzeichnis und das nächste „RUN“ macht die Datei ausführbar. Die letzte Zeile legt fest, welches Programm der Container automatisch starten soll. Die Datei „echo_hello.sh“ enthält nur zwei Zeilen, wie Sie in der Abbildung sehen.

Schritt 2: Wechseln Sie in den Ordner, in dem die Scripts „Dockerfile“ und „echo_hello.sh“ liegen. Erstellen Sie hier das Image mit

docker build -t test:latest .

Beachten Sie den abschließenden Punkt. Docker lädt das Image „ubuntu:24.04“ herunter (sofern bisher nicht vorhanden), führt die Befehle aus und erstellt das Image „test:latest“.

Schritt 3: Erstellen Sie nun einen temporären Container mit

docker run --rm test:latest

Im Terminal sehen Sie die Ausgabe „Hallo Welt“. Der Schalter „–rm“ bewirkt, dass Docker den Container beim Verlassen automatisch entfernt.

Schritt 4: Wenn Sie interaktiv mit dem Container arbeiten möchten, starten Sie

docker run -i -t --rm --entrypoint
""  test:latest bash

Mit der Angabe von „–entrypoint“ kann man das Start-Script überschreiben. In diesem Fall wird es durch eine leere Zeichenkette ersetzt, weshalb Sie in der Bash-Shell landen.

Anwendungen mit Docker-Compose installieren

Was ein Dockerfile für Images leistet, bieten Docker-Compose-Scripts für Container. In ihnen werden das Image und die Konfiguration festgelegt. Die Scripts sind im YAML-Format verfasst und enthalten Datenblöcke, die durch Einrückungen mit Leerzeichen gebildet werden.

Docker-Compose wird meist verwendet, um mehrere Container zu erstellen. Typisch ist die Kombination von Webserver, Datenbanksystem, PHP und Webanwendung. Ein einfaches Beispiel zeigt die Abbildung. Die Datei „Apache-PHP-docker-compose.yaml“ enthält unter „services:“ den Block „php:“, der das Image „php:fpm-alpine“ einbindet. Unter „server:“ steht die Definition für den Container des Webservers. Hier ist das Image nicht direkt angegeben, weil noch eine Anpassung nötig ist, die über „dockerfile: Dockerfile-httpd“ erfolgt. Die Bezeichnungen der Dienste („php“ und „server“) sind frei wählbar und dürfen aus Groß- und Kleinbuchstaben sowie Zahlen bestehen.

Docker-Compose: In einer Yaml-Datei werden Images oder Dockerfiles und die Konfiguration festgelegt. Mit nur einer Befehlszeile erzeugt Docker daraus mehrere Container.

Die Datei „Dockerfile-httpd“ kopiert die vorbereitete Datei „php.apache.conf“ nach
„/usr/local/apache2/conf/php.apache.conf“ im Container und bindet sie in die Apache-Konfiguration ein. Deren Aufgabe: Alle php-Dateien werden umgeleitet und über das Modul aus dem PHP-Container verarbeitet. Die Kommunikation der ansonsten unabhängigen Container erfolgt über den Netzwerkport 9000, der bei „php:fpm-alpine“ Standard ist. Der Webserver horcht in seinem Container auf den Standardport 80, den Docker an den Port 8888 des Rechners weiterleitet (festgelegt hinter „ports:“).

„volumes:“ definiert den Speicherort der Dateien für PHP und den Webserver. Die Zeile

- "./website:/var/www/html"

gibt an, dass der Ordner „website“ im gleichen Ordner wie die Docker-Compose-Datei liegt und in den Container unter „/var/www/html“ eingebunden wird („bind mount“). Die Dateien liegen also außerhalb des Containers und können von Ihnen bearbeitet werden. Der Ordner bleibt erhalten, auch wenn Sie den Container löschen.

Container erstellen: Für die Verarbeitung der YAML-Datei genügt eine Befehlszeile:

docker compose -f
Apache-PHP-docker-compose.yaml up

Hinter „-f“ steht der Dateiname. Wenn Sie ihn weglassen, sucht Docker nach der Datei „docker-compose.yaml“. „up“ startet die Container und im Terminal können Sie den Fortschritt verfolgen.

Rufen Sie dann im Browser „http://local host:8888“ auf. Der Webserver liefert die Datei „index.php“ aus, die einen über PHP generierten Text und das Datum anzeigt. „http://localhost:8888/info.php“ ruft eine Tabelle mit Informationen zur PHP-Konfiguration auf. Der Webserver kann auch HTLM-Dateien ausliefern, die sich im Ordner „website“ befinden.

Drücken Sie im Terminal Strg-C, um den Container zu stoppen. Wenn ein Container einwandfrei läuft, können Sie „-d“ an den Docker-Aufruf anhängen. Der Container startet dann unsichtbar im Hintergrund. Bei einem Linux-Neustart werden laufende Container nicht automatisch gestartet. Wenn Sie das wünschen, bauen Sie die Zeile

restart: always

bei jedem Dienst in die Datei „Apache-PHP-docker-compose.yaml“ ein.

Hinweis: Unsere Beispielsammlung auf https://m6u.de/DOCKC enthält weitere Docker-Compose-Dateien. Mit dabei sind unter anderem Konfigurationsdateien für Apache mit PHP und My SQL sowie für Apache, PHP, My SQL und WordPress. 

Webserver mit PHP: Diese Docker-Compose-Datei erstellt zwei Container, die miteinander über das Docker-Netzwerk Daten austauschen.

Zusätzliche Informationen: Docker-Container und Zugriffsrechte

Da Docker mit administrativen Rechten läuft, haben Container kein Problem, auf alle Dateien im Dateisystem zuzugreifen. Das gilt aber nur, wenn Dienste im Container unter dem Benutzerkonto „root“ laufen.

In den Containern läuft ein eigenständiges Linux, das nichts von den Benutzerkonten des Hosts weiß. Da auf allen Systemen der Benutzer „root“ die ID „0“ hat, sind hier keine Konflikte zu erwarten. Einige Dienste in Containern starten jedoch unter anderen Benutzerkonten, etwa der Webserver mit Benutzer und Gruppe „www-data“. Probleme treten auf, wenn eine Webanwendung Dateien schreiben möchte, die in Ihrem Home-Verzeichnis liegen. Der Benutzer „www-data“ existiert auf dem Host vielleicht nicht – und wenn doch, dann wahrscheinlich mit einer anderen Benutzer-ID. Bei unserem Beispiel mit Apache und PHP benötigt der Webserver nur Leserechte für den Ordner „website“ in Ihrem Home-Verzeichnis.

Wenn ein Container Fehlermeldungen ausgibt, weil Zugriffsrechte fehlen, müssen Sie die Berechtigungen mit chmod gewähren. Bei einigen Docker-Anwendungen kann man die Gruppen- und Benutzer-IDs auch über die Docker-Compose-Datei anpassen. Informationen dazu finden Sie in der zugehörigen Dokumentation.