Docker einrichten: Der komplette Guide für Selbsthoster
Docker installieren, verstehen und die ersten Container starten – inklusive Docker-Compose.
Am Ende dieser Anleitung haben Sie Docker auf Ihrem Ubuntu- oder Debian-System vollständig installiert, verstehen die wichtigsten Grundbefehle und können Ihren ersten echten Container starten. Sie wissen außerdem, was Docker Compose ist und wie Sie damit mehrere Dienste bequem zusammen verwalten. Kurz gesagt: Sie haben die Grundlage gelegt, um Programme sauber verpackt und isoliert auf Ihrem Rechner laufen zu lassen.
Das brauchen Sie vorab
- Ein Rechner mit Ubuntu 22.04 LTS, Ubuntu 24.04 LTS oder neuer, da Docker diese Versionen offiziell unterstützt. Auf Derivaten wie Linux Mint kann es funktionieren, wird aber nicht offiziell getestet.
- Ein 64-Bit-System (amd64 oder arm64), denn Docker Engine wird nur für diese Architekturen bereitgestellt. Sehr alte 32-Bit-Rechner scheiden aus.
- Ein Benutzerkonto mit sudo-Rechten. 'sudo' bedeutet, dass Sie kurzzeitig Verwaltungsrechte bekommen, um Software zu installieren. Ohne diese Rechte lässt sich Docker nicht einrichten.
- Eine funktionierende Internetverbindung, weil die Installationsdateien und später auch die Container-Vorlagen aus dem Netz geladen werden.
- Grundlegende Vertrautheit mit dem Terminal. Das Terminal ist das schwarze Fenster, in das man Textbefehle eintippt. Sie müssen kein Profi sein, aber sollten Befehle abtippen und die Eingabetaste drücken können.
Schritt für Schritt
-
Terminal öffnen und System aktualisieren
Bevor wir überhaupt mit Docker anfangen, sorgen wir dafür, dass Ihr System auf dem neuesten Stand ist. Das verhindert viele spätere Probleme, weil alte Paketlisten oft zu Fehlern führen.
Öffnen Sie das Terminal. Unter Ubuntu drücken Sie dazu die Tastenkombination Strg + Alt + T, oder Sie suchen im Anwendungsmenü nach 'Terminal'. Es erscheint ein Fenster mit einer blinkenden Eingabezeile – hier tippen wir gleich Befehle ein.
Der folgende Befehl macht zwei Dinge:
apt updatelädt die aktuelle Liste verfügbarer Software herunter, undapt upgradeinstalliert die neueren Versionen bereits vorhandener Programme. Das Wort 'apt' ist die Paketverwaltung von Ubuntu und Debian – eine Art App-Store für das Terminal.sudo apt update && sudo apt upgrade -y -
Alte oder inoffizielle Docker-Pakete entfernen
Manchmal sind schon inoffizielle Docker-Versionen aus den Standard-Quellen von Ubuntu installiert. Diese können mit der offiziellen Version in Konflikt geraten, deshalb räumen wir zuerst auf.
Keine Sorge, wenn dieser Schritt meldet, dass gar nichts zu entfernen ist – das bedeutet einfach, dass Ihr System sauber ist. Der Befehl schadet in diesem Fall nicht.
Der folgende Befehl versucht, mehrere bekannte alte Pakete gleichzeitig zu entfernen. Der Teil
$(dpkg --get-selections ...)sucht dabei automatisch heraus, welche dieser Pakete tatsächlich installiert sind, und übergibt nur diese an den Entfernungsbefehl.sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc | cut -f1) -
Docker-Paketquelle einrichten
Damit Ihr System die offizielle Docker-Version findet, müssen wir Ubuntu mitteilen, wo diese liegt. Das nennt man 'Repository' – ein Repository ist einfach eine Online-Quelle, aus der Software heruntergeladen wird.
Zuerst installieren wir zwei Hilfsprogramme:
ca-certificatessorgt dafür, dass verschlüsselte Verbindungen als vertrauenswürdig erkannt werden, undcurlkann Dateien aus dem Internet herunterladen. Danach legen wir einen Ordner für sogenannte Schlüssel an und laden den offiziellen Docker-Schlüssel herunter. Dieser Schlüssel bestätigt, dass die Software wirklich von Docker stammt und nicht manipuliert wurde.Führen Sie die folgenden Befehle nacheinander aus. Jede Zeile ist ein eigener Schritt: Der Ordner
/etc/apt/keyringswird erstellt, der Schlüssel wird dort abgelegt und anschließend lesbar gemacht.sudo apt update sudo apt install ca-certificates curl -y sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc -
Docker-Repository zur Paketliste hinzufügen
Jetzt tragen wir die Docker-Quelle offiziell in die Liste der Software-Quellen ein. Erst danach weiß Ihr System, dass es Docker von dort beziehen darf.
Der folgende Befehl sieht kompliziert aus, aber er erledigt alles automatisch: Er erkennt Ihre Ubuntu-Version und Ihre Systemarchitektur und schreibt die passende Zeile in die Datei
/etc/apt/sources.list.d/docker.list. Danach führen wir noch einmalapt updateaus, damit die neue Quelle eingelesen wird.Nach dem
apt updatesollten Sie in der Ausgabe eine Zeile sehen, die aufdownload.docker.comverweist. Das ist das Zeichen, dass die neue Quelle erfolgreich erkannt wurde.echo \n "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \n $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \n sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update -
Docker Engine installieren
Jetzt kommt der eigentliche Kern: die Installation der Docker Engine. 'Engine' bedeutet hier der Motor, der im Hintergrund läuft und Ihre Container startet, stoppt und verwaltet.
Wir installieren gleich mehrere Bestandteile:
docker-ceist die Engine selbst,docker-ce-cliist das Kommandozeilen-Werkzeug zum Steuern,containerd.ioist die tiefe Ebene, die Container tatsächlich ausführt, und die beiden Plugins fügen Zusatzfunktionen wie Docker Compose hinzu.Der Download kann je nach Verbindung ein paar Minuten dauern. Am Ende erscheint wieder die normale Eingabezeile ohne Fehlermeldung – das bedeutet, dass alles geklappt hat.
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y -
Installation mit einem Testcontainer prüfen
Um sicherzugehen, dass Docker wirklich läuft, starten wir einen winzigen Testcontainer namens 'hello-world'. Ein Container ist eine abgeschottete kleine Umgebung, in der ein Programm läuft, ohne den Rest Ihres Systems zu beeinflussen.
Der Befehl
docker runlädt bei Bedarf zuerst das benötigte Abbild (englisch 'Image') aus dem Internet herunter. Ein Image ist die Vorlage, aus der ein Container erzeugt wird – vergleichbar mit einer Schablone.Wenn alles funktioniert, sehen Sie eine freundliche Meldung, die mit 'Hello from Docker!' beginnt. Das bestätigt, dass Docker herunterladen, starten und ausführen kann. Genau das wollten wir sehen.
sudo docker run hello-world -
Docker ohne sudo nutzbar machen (optional)
Bisher mussten Sie vor jedem Docker-Befehl
sudoschreiben. Das ist auf Dauer umständlich. Sie können Ihren Benutzer zur Gruppe 'docker' hinzufügen, dann geht es auch ohne.Wichtig zu wissen: Mitglieder der Gruppe 'docker' haben faktisch weitreichende Rechte auf dem System. Auf Ihrem persönlichen Rechner ist das völlig in Ordnung, auf einem geteilten Server sollten Sie es sich gut überlegen.
Nach dem folgenden Befehl müssen Sie sich einmal ab- und wieder anmelden (oder den Rechner neu starten), damit die Änderung wirksam wird. Danach können Sie Docker-Befehle ohne
sudoausführen und mitdocker run hello-worlderneut testen.sudo usermod -aG docker $USER -
Die wichtigsten Grundbefehle kennenlernen
Jetzt lernen Sie die vier Befehle, die Sie im Alltag am häufigsten brauchen. Wir starten dazu einen echten, nützlichen Container: einen Nginx-Webserver, der eine Webseite ausliefern kann.
Der Befehl
docker run -d -p 8080:80 --name meinweb nginxstartet Nginx. Dabei bedeutet-d, dass der Container im Hintergrund läuft ('detached'),-p 8080:80verbindet Port 8080 Ihres Rechners mit Port 80 im Container (Ports sind wie nummerierte Türen für Netzwerkverbindungen), und--name meinwebgibt dem Container einen leicht merkbaren Namen. Öffnen Sie danach im Browser die Adressehttp://localhost:8080, sehen Sie die Nginx-Willkommensseite.Mit
docker pssehen Sie alle laufenden Container.docker logs meinwebzeigt Ihnen die Ausgaben (das 'Logbuch') des Containers, was bei der Fehlersuche hilft. Unddocker exec -it meinweb bashöffnet eine Kommandozeile direkt im Inneren des Containers, sodass Sie sich darin umsehen können. Mit dem Befehlexitverlassen Sie diese innere Kommandozeile wieder.docker run -d -p 8080:80 --name meinweb nginx docker ps docker logs meinweb docker exec -it meinweb bash -
Docker Compose verstehen und einsetzen
In der Praxis braucht man oft mehrere Container gleichzeitig, zum Beispiel einen Webserver und eine Datenbank. Von Hand mit vielen
docker run-Befehlen wird das schnell unübersichtlich. Genau hier hilft Docker Compose.Mit Compose beschreiben Sie in einer einzigen Textdatei namens
docker-compose.yml, welche Container Sie haben möchten und wie sie zusammenarbeiten. Danach starten Sie alles mit einem einzigen Befehl. Das Dateiformat heißt YAML – wichtig dabei ist, dass die Einrückungen mit Leerzeichen (keine Tabs) exakt stimmen müssen.Legen Sie zuerst einen neuen Ordner an und wechseln hinein, etwa mit
mkdir mein-projekt && cd mein-projekt. Erstellen Sie darin die Dateidocker-compose.ymlmit dem unten gezeigten Inhalt. Anschließend starten Sie das Ganze mitdocker compose up -d. Der Container wird gestartet, und unterhttp://localhost:8081erreichen Sie den Webserver. Mitdocker compose downfahren Sie später alles wieder sauber herunter.# Datei: docker-compose.yml services: web: image: nginx ports: - "8081:80" # Danach im selben Ordner ausführen: docker compose up -d docker compose down
Häufige Probleme und Lösungen
Beim Ausführen von Docker-Befehlen erscheint 'permission denied' oder 'Cannot connect to the Docker daemon'.
Das bedeutet, dass Ihr Benutzer keine Rechte hat oder die Änderung der Gruppenmitgliedschaft noch nicht wirksam ist. Melden Sie sich einmal komplett ab und wieder an, nachdem Sie sudo usermod -aG docker $USER ausgeführt haben. Alternativ stellen Sie jedem Befehl vorübergehend wieder sudo voran. Prüfen Sie mit sudo systemctl status docker, ob der Docker-Dienst überhaupt läuft.
Ein Container-Port ist von außen erreichbar, obwohl die Firewall (ufw) ihn eigentlich blockieren sollte.
Docker verändert die Firewall-Regeln direkt auf iptables-Ebene und umgeht dabei ufw und firewalld. Verlassen Sie sich also nicht darauf, dass ufw exponierte Container-Ports schützt. Wenn Sie Ports absichern müssen, binden Sie den Port an eine lokale Adresse (zum Beispiel -p 127.0.0.1:8080:80) oder nutzen Sie direkte iptables-Regeln beziehungsweise ein spezielles Docker-kompatibles Firewall-Setup.
Beim 'apt update' erscheint ein Fehler wie 'NO_PUBKEY' oder die Docker-Quelle wird nicht gefunden.
Meist ist der GPG-Schlüssel nicht korrekt gespeichert oder nicht lesbar. Wiederholen Sie den Schritt zum Herunterladen des Schlüssels und stellen Sie sicher, dass Sie danach sudo chmod a+r /etc/apt/keyrings/docker.asc ausgeführt haben. Prüfen Sie außerdem den Inhalt der Datei /etc/apt/sources.list.d/docker.list – dort sollte Ihre korrekte Ubuntu-Version stehen.
Fazit
Sie haben Docker offiziell installiert, mit einem Testcontainer geprüft und die vier zentralen Befehle run, ps, logs und exec praktisch angewendet. Zusätzlich wissen Sie nun, wie Docker Compose mehrere Container über eine einzige Datei bequem verwaltet. Damit haben Sie das Fundament, um eigene Anwendungen sauber verpackt und wiederholbar auf jedem System zu betreiben.
Für Self-Hosting-Setups empfehlen wir einen VPS mit mindestens 2 GB RAM. Hetzner Cloud ist unser Standard-Partner für zuverlässige, günstige Server aus deutschen Rechenzentren.
Hetzner Cloud ab 3,29 € → Mit einem Kauf über diesen Link unterstützen Sie unsere Arbeit – ohne Mehrkosten für Sie.Häufige Fragen
Was ist eigentlich der Unterschied zwischen einem Image und einem Container?
Ein Image ist die unveränderliche Vorlage – vergleichbar mit einem Rezept oder einer Schablone. Ein Container ist die konkrete, laufende Instanz, die aus diesem Image erzeugt wird. Aus einem einzigen Image können Sie beliebig viele Container gleichzeitig starten, so wie Sie aus einem Rezept mehrere Portionen kochen können. Wenn Sie einen Container löschen, bleibt das Image erhalten und kann jederzeit erneut verwendet werden.
Warum sollte ich Docker überhaupt nutzen und nicht einfach Programme direkt installieren?
Docker verpackt eine Anwendung samt aller benötigten Bestandteile in einen abgeschotteten Container. Dadurch läuft das Programm auf jedem Rechner gleich, unabhängig davon, welche anderen Programme oder Versionen dort installiert sind. Sie vermeiden das klassische Problem, dass eine Software auf einem Rechner läuft und auf einem anderen nicht. Außerdem können Sie Container schnell starten, stoppen und rückstandslos wieder entfernen, ohne Ihr eigentliches System zu verändern.
Was bedeutet 'docker compose' gegenüber dem älteren 'docker-compose' mit Bindestrich?
Früher war Docker Compose ein eigenständiges Programm, das man mit Bindestrich als docker-compose aufrief. In der aktuellen Version ist Compose als Plugin direkt in Docker integriert und wird ohne Bindestrich als docker compose verwendet. In dieser Anleitung haben wir über das Paket 'docker-compose-plugin' genau diese moderne Variante installiert. Sie sollten daher immer die Schreibweise mit Leerzeichen nutzen.
Muss ich mir Sorgen machen, dass ein Container mein System beschädigt?
Container sind vom Hostsystem weitgehend abgeschottet, das ist einer ihrer großen Vorteile. Änderungen innerhalb eines Containers betreffen normalerweise nicht Ihr eigentliches System. Trotzdem sollten Sie nur Images aus vertrauenswürdigen Quellen wie dem offiziellen Docker Hub verwenden. Beachten Sie außerdem, dass Docker Firewall-Regeln umgehen kann, weshalb Sie bei ins Internet exponierten Ports vorsichtig sein sollten.
Wie werde ich einen Container wieder los, den ich nicht mehr brauche?
Zuerst stoppen Sie den laufenden Container mit docker stop meinweb, wobei 'meinweb' der Name oder die ID ist. Danach entfernen Sie ihn mit `docker rm meinwe