RDP Monster

Docker auf Ubuntu 24.04/22.04 VPS installieren

Docker auf Ubuntu 24.04/22.04 VPS installieren

Bevor Sie starten: ein KVM-VPS, ein unterstütztes Ubuntu und ein sudo-Benutzer

Docker Engine bringt keinen eigenen Kernel mit. Jeder Container teilt sich den Host-Kernel und stützt sich auf Linux-Namespaces, cgroups und netfilter, der Daemon braucht also einen VPS, auf dem Sie den Kernel besitzen. Genau das bietet ein KVM-VPS (Vollvirtualisierung). Bei containerbasierten Tarifen auf Basis von OpenVZ oder LXC gehört der Kernel dem Anbieter, und Docker verweigert entweder den Start oder funktioniert nur, wenn der Host Nesting aktiviert hat. Prüfen Sie das, bevor Sie irgendetwas installieren:

systemd-detect-virt                          # expect: kvm
. /etc/os-release && echo "$VERSION_CODENAME"   # noble (24.04) or jammy (22.04)
uname -m                                     # x86_64 or aarch64

Docker veröffentlicht Pakete für 64-Bit-Ubuntu 24.04 LTS (noble) und 22.04 LTS (jammy), auf x86_64 und arm64. Außerdem brauchen Sie einen Benutzer mit sudo-Rechten; die Abschnitte zur Gruppe docker und zum rootless-Modus setzen ein normales Konto statt root voraus.

Docker Engine aus dem offiziellen apt-Repository installieren

Es gibt vier gängige Wege, Docker unter Ubuntu zu installieren, und nur einer ist die von Docker dokumentierte und für Server unterstützte Methode:

MethodePaketFazit
Dockers apt-Repositorydocker-ce von download.docker.comEmpfohlen: aktuelle Versionen, Updates über apt upgrade, Compose- und Buildx-Plugins inklusive.
Ubuntu universedocker.ioFunktioniert, aber Ubuntus eigener Build hinkt Upstream hinterher und enthält die Plugins nicht.
Snapsnap install dockerEingeschränkte Installation mit eigenen Pfaden; häufige Quelle für überraschende "permission denied"-Fehler. Auf Servern vermeiden.
Convenience-Skriptget.docker.comDieselben Pakete, aber ungeprüft in eine Root-Shell gepipt. Nur für Wegwerf-Maschinen.

Schritt 1: konfliktträchtige Pakete entfernen

Wenn das VPS-Image bereits Ubuntus docker.io, ein altes docker-compose oder podman-docker enthält, entfernen Sie diese, damit sich die beiden Builds nicht um /usr/bin/docker streiten. Diese Schleife stammt aus der Docker-Dokumentation und ist auf einem sauberen System harmlos; /var/lib/docker bleibt unangetastet:

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
  sudo apt-get remove $pkg
done

Schritt 2: Dockers GPG-Schlüssel und apt-Quelle hinzufügen

Der Schlüssel landet in /etc/apt/keyrings/ und wird per signed-by= referenziert, was ihn auf dieses eine Repository begrenzt, statt ihm über das veraltete apt-key global zu vertrauen. Der Codename wird aus /etc/os-release gelesen, derselbe Block funktioniert also unter 24.04 und 22.04:

sudo apt-get update
sudo apt-get install -y ca-certificates curl
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

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

Ein Signaturfehler bei diesem letzten apt-get update bedeutet fast immer, dass die Schlüsseldatei nicht lesbar ist; führen Sie die chmod-Zeile erneut aus.

Schritt 3: Engine und Plugins installieren

sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

docker-ce ist der Daemon, docker-ce-cli der Client, containerd.io die darunterliegende Runtime, und die beiden Plugins liefern docker buildx und docker compose. Unter Ubuntu startet das Post-Install-Skript des Pakets docker.service sofort und aktiviert es beim Systemstart.

Schritt 4: mit hello-world überprüfen

sudo docker run hello-world
docker --version
sudo docker info | head -n 20

hello-world ist der entscheidende Test: Der Client spricht mit dem Daemon, der Daemon lädt ein winziges Image von Docker Hub, erstellt einen Container, führt ihn aus und gibt seine Ausgabe zurück. Wenn Sie "Hello from Docker!" sehen, funktioniert jede Schicht. Auf einer gesunden Installation von 24.04 oder 22.04 meldet docker info Storage Driver: overlay2 und Cgroup Version: 2.

Docker ohne sudo nutzen: die Gruppe docker

Der Daemon lauscht am Unix-Socket /var/run/docker.sock, der root:docker gehört, sodass Mitglieder der Gruppe docker die CLI ohne sudo verwenden können:

sudo groupadd docker          # usually exists already; harmless if it does
sudo usermod -aG docker $USER
newgrp docker                 # or log out and back in
docker run hello-world

Machen Sie sich klar, was Sie damit gewähren. Wer diesen Socket erreicht, kann docker run -v /:/host --privileged ... ausführen und jede Datei auf dem VPS lesen oder überschreiben. Damit ist die Mitgliedschaft in der Gruppe docker gleichbedeutend mit Root – ohne Passwortabfrage und ohne sudo-Logeintrag. Behandeln Sie sie genau wie sudo-Zugriff; unser Leitfaden zum Benutzerwechsel und zur Rechteausweitung unter Ubuntu erklärt, warum dieser Unterschied auf einem Mehrbenutzersystem zählt.

Docker-Compose-Plugin

Das Paket docker-compose-plugin stellt Compose v2 als Unterbefehl docker compose bereit (mit Leerzeichen). Das alte Python-Binary docker-compose hat das Support-Ende erreicht und sollte nicht daneben installiert werden. Prüfen Sie die Version und testen Sie dann mit einer minimalen compose.yaml:

docker compose version

mkdir -p ~/web && cd ~/web
cat > compose.yaml <<'EOF'
services:
  web:
    image: nginx:alpine
    ports:
      - "127.0.0.1:8080:80"
    restart: unless-stopped
EOF

docker compose up -d
docker compose ps
curl -I http://127.0.0.1:8080
docker compose down

Zwei Details sind Absicht: restart: unless-stopped bringt den Container nach einem Neustart zurück, und der Port ist an 127.0.0.1 statt an alle Interfaces gebunden – aus Gründen, die der Firewall-Abschnitt erklärt.

Rootless-Modus: ein Daemon, der nicht root ist

Im rootless-Modus laufen der Daemon und die Container in einem User-Namespace, sodass ein Container-Ausbruch in einem unprivilegierten Konto statt bei root landet. Das ist die richtige Wahl, wenn sich mehrere Personen einen VPS teilen. Voraussetzungen sind untergeordnete UID/GID-Bereiche (Ubuntu legt sie für normale Benutzer in /etc/subuid und /etc/subgid an), die uidmap-Werkzeuge, eine D-Bus-Benutzersitzung und Dockers rootless-Extras:

sudo apt-get install -y uidmap dbus-user-session docker-ce-rootless-extras
grep "^$USER:" /etc/subuid /etc/subgid   # each should show a range of 65536 IDs

# optional: stop the system-wide daemon if you only want rootless
sudo systemctl disable --now docker.service docker.socket

dockerd-rootless-setuptool.sh install

Das Setup-Werkzeug erstellt eine systemd-Unit pro Benutzer und gibt die beiden Variablen aus, die Ihre Shell braucht. Tragen Sie sie in ~/.bashrc ein und sorgen Sie dann dafür, dass der Benutzer-Daemon ohne Anmeldung beim Systemstart läuft:

export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock

systemctl --user enable docker
sudo loginctl enable-linger $(whoami)

Der rootless-Modus hat echte Grenzen: Ports unter 1024 lassen sich nur veröffentlichen, wenn Sie sudo setcap cap_net_bind_service=ep $(which rootlesskit) ausführen und den Benutzer-Daemon neu starten, Overlay-Netzwerke stehen nicht zur Verfügung, und die Daten liegen unter ~/.local/share/docker. Unter Ubuntu 24.04 schränkt AppArmor unprivilegierte User-Namespaces ein; die deb-Pakete liefern das Profil mit, das rootlesskit benötigt, bei einer Installation über statische Binaries muss es jedoch von Hand ergänzt werden, wie in der rootless-Dokumentation beschrieben.

Startverhalten, Speicher und Logrotation

Zwei getrennte Dinge entscheiden, ob Ihre Container nach einem Neustart laufen: Der Daemon muss aktiviert sein, und jeder Container braucht eine Restart-Policy. Ubuntus Pakete aktivieren den Dienst für Sie; bestätigen Sie das, und falls Ihnen die Unit-Zustände unbekannt vorkommen, erklärt unsere Referenz zum Auflisten von Diensten mit systemctl jede Spalte:

systemctl is-enabled docker.service containerd.service
sudo systemctl enable docker.service containerd.service   # only if the line above said disabled

Container, die ohne --restart gestartet wurden, bleiben nach einem Neustart aus; verwenden Sie --restart unless-stopped auf der Kommandozeile oder restart: unless-stopped in Compose für alles Dauerhafte.

Alles, was Docker speichert – Image-Layer, Container-Dateisysteme, Volumes, Logs – liegt unter /var/lib/docker, und auf einem kleinen VPS ist das genau das Verzeichnis, das die Festplatte füllt. Beobachten Sie es mit docker system df, geben Sie verwaiste Layer mit docker system prune frei und lesen Sie die Rückfrage, bevor Sie -a ergänzen, denn das löscht auch jedes Image, das kein laufender Container nutzt. Hat der VPS eine zweite Festplatte, richten Sie data-root in /etc/docker/daemon.json darauf aus, bevor Sie etwas Großes herunterladen.

Logs verdienen eine eigene Warnung. Der Standardtreiber json-file schreibt jede Zeile der Container-Standardausgabe nach /var/lib/docker/containers/<id>/<id>-json.log und führt keine Rotation durch, solange Sie sie nicht konfigurieren. Ein gesprächiger Container kann die gesamte Festplatte in einer Woche auffressen. Setzen Sie daemonweite Limits vom ersten Tag an:

sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
  "log-driver": "json-file",
  "log-opts": { "max-size": "10m", "max-file": "3" },
  "live-restore": true
}
EOF
sudo systemctl restart docker

Log-Optionen gelten für Container, die nach dem Neustart erstellt werden; langlebige Container müssen Sie also einmal neu erzeugen. live-restore erlaubt dem Daemon, für Upgrades neu zu starten, ohne laufende Container zu beenden.

Docker und ufw: veröffentlichte Ports umgehen Ihre Firewall

Das ist der Punkt, über den die meisten auf einem öffentlichen VPS stolpern. Docker verwaltet eigene iptables-Regeln: Wenn Sie einen Port mit -p 8080:80 veröffentlichen, fügt der Daemon eine DNAT-Regel in die Kette PREROUTING der nat-Tabelle und eine Accept-Regel in FORWARD ein. Die Regeln von ufw liegen in INPUT, das weitergeleiteter Verkehr nie durchläuft. ufw deny 8080 hat also keine Wirkung, und ein auf 0.0.0.0:5432 veröffentlichter Datenbank-Container ist aus dem gesamten Internet erreichbar, während ufw den Port als blockiert meldet. Achten Sie auf 0.0.0.0: in der Spalte PORTS von docker ps oder führen Sie ss -tlnp aus; unser Leitfaden zum Prüfen offener Ports unter Linux zeigt, wie Sie diese Ausgabe lesen und die Erreichbarkeit von außen bestätigen.

Zwei saubere Lösungen, nach Präferenz geordnet:

  1. Veröffentlichte Ports an Loopback binden. -p 127.0.0.1:8080:80 hält den Dienst nur vom VPS selbst aus erreichbar, typischerweise hinter einem Reverse Proxy wie nginx oder Caddy, den Sie bewusst nach außen öffnen. Container, die nur miteinander sprechen, brauchen überhaupt kein -p.
  2. In der Kette DOCKER-USER filtern. Docker wertet diese Kette vor seinen eigenen FORWARD-Regeln aus und schreibt sie nie um. Da DNAT bereits stattgefunden hat, wenn ein Paket dort ankommt, gleichen Sie den ursprünglichen Port mit conntrack ab:
sudo iptables -I DOCKER-USER -i eth0 ! -s 203.0.113.10 -p tcp \
  -m conntrack --ctorigdstport 8080 --ctdir ORIGINAL -j DROP

Ersetzen Sie eth0 durch Ihr öffentliches Interface und 203.0.113.10 durch die zugelassene Adresse. Diese Regeln sind nicht dauerhaft; sichern Sie sie mit dem Paket iptables-persistent. "iptables": false in der daemon.json zu setzen, zerstört das Container-Networking auf schwer zu debuggende Weise; lassen Sie die Option in Ruhe.

Docker vollständig deinstallieren

Entfernen Sie zuerst die Pakete per purge und löschen Sie dann die Datenverzeichnisse, die apt bewusst stehen lässt:

sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker /var/lib/containerd
sudo rm -f /etc/apt/sources.list.d/docker.list /etc/apt/keyrings/docker.asc
sudo apt-get autoremove -y

Bei einem rootless-Setup führen Sie zuerst als Benutzer dockerd-rootless-setuptool.sh uninstall aus und löschen anschließend ~/.local/share/docker.

All das setzt einen Server voraus, auf dem Sie root sind, den Kernel kontrollieren und iptables umschreiben können, ohne jemanden zu fragen. Wenn Sie eine solche Maschine noch brauchen: Der KVM-Linux-VPS mit vollem Root-Zugriff von rdp.monster liefert Ubuntu 24.04 oder 22.04 mit dedizierter CPU und dediziertem RAM, unlimitierter Bandbreite (Fair Use), ohne KYC, mit Krypto-Zahlung, ab $8.99 pro Monat, und wird etwa 10 Sekunden nach Zahlungsbestätigung bereitgestellt – Sie können den hello-world-Test von oben also direkt nach dem Checkout auf Ihrem eigenen Server ausführen.

Häufig gestellte Fragen

Welche Docker-Version installiert apt unter Ubuntu, und wie aktualisiere ich sie?

Das Repository installiert die neueste stabile Docker Engine, und apt upgrade hält sie aktuell.
Mit eingerichtetem apt-Repository von Docker holt apt-get install docker-ce die neueste stabile Version für Ihren Ubuntu-Codenamen, und jedes spätere sudo apt-get update && sudo apt-get upgrade bringt Sie weiter nach vorn. Führen Sie docker version aus, um Client- und Server-Version zu sehen. Um eine bestimmte Version festzuhalten, listen Sie die Kandidaten mit apt-cache madison docker-ce auf, installieren docker-ce=<version> zusammen mit dem passenden docker-ce-cli und setzen dann für beide Pakete apt-mark hold.

Warum erhalte ich "permission denied while trying to connect to the Docker daemon socket"?

Ihr Benutzer kann /var/run/docker.sock nicht lesen; treten Sie der Gruppe docker bei oder nutzen Sie sudo.
Der Daemon-Socket gehört root:docker, ein einfacher Benutzer bekommt daher permission denied. Stellen Sie den Befehlen entweder sudo voran oder fügen Sie sich mit sudo usermod -aG docker $USER hinzu und starten anschließend eine neue Anmeldesitzung (oder führen newgrp docker aus), denn Gruppenänderungen gelten nur für neue Sitzungen. Bleibt der Fehler bestehen, prüfen Sie mit groups die Mitgliedschaft, kontrollieren Sie mit systemctl status docker, ob der Daemon läuft, und stellen Sie sicher, dass DOCKER_HOST nicht auf einen nicht existierenden rootless-Socket zeigt.

Soll ich Docker unter Ubuntu Server mit snap oder apt installieren?

Nutzen Sie apt mit Dockers Repository; das Snap bringt Confinement-Eigenheiten ohne Vorteil auf einem Server.
Bevorzugen Sie apt aus Dockers eigenem Repository. Das Snap ist strikt eingeschränkt: Es kann ohne zusätzliche Interface-Verbindungen keine Dateien außerhalb Ihres Home-Verzeichnisses lesen, nutzt andere Pfade für daemon.json und die Daten, und sein Update-Rhythmus wird von snapd bestimmt, nicht von Ihnen. Diese Eigenheiten zeigen sich als rätselhafte permission denied-Meldungen und fehlschlagende Bind-Mounts. Die apt-Pakete folgen den üblichen Ubuntu-Konventionen, binden sich normal in systemd ein und erhalten Upstream-Updates über dasselbe apt upgrade, das Sie ohnehin ausführen.

Wie viel RAM und Speicherplatz braucht ein Docker-VPS?

Die Engine selbst ist leichtgewichtig; dimensionieren Sie den VPS nach den Containern und ihren Images.
Docker Engine belegt im Leerlauf einige Dutzend Megabyte RAM, das eigentliche Budget bestimmt also Ihre Arbeitslast. Eine einzelne kleine Webanwendung mit Datenbank läuft bequem in 2 GB; schwerere Stacks oder mehrere Projekte wollen 4 GB oder mehr. Der Speicherplatz zählt mehr, als viele erwarten: Images, Build-Cache und Logs landen alle in /var/lib/docker, und 20 GB füllen sich ohne docker system prune und Logrotation schnell. Bevorzugen Sie dedizierte CPU und dediziertes RAM gegenüber geteilten Burst-Anteilen, denn Builds erzeugen harte Lastspitzen und Container können nicht elegant auslagern.

Adrien Roche, Redakteur für Infrastruktur & Hosting

Systemingenieur mit über 10 Jahren Erfahrung im Betrieb von Windows-Server- und Linux-Flotten. Adrien pflegt die Infrastruktur-Dokumentation von rdp.monster und schreibt unsere Guides zu RDP, VPS-Hosting, Serveradministration, Netzwerken und Privacy-Tools.

Für unser Reseller-Programm registrieren

Ihre Angaben

Wenn Sie Fragen haben, contact us by clicking here !
Name(Pflichtfeld)
Geben Sie Ihre E-Mail-Adresse ein. Sie benötigen ein Konto bei manager.rdp.monster !

Ihr Unternehmen

Geben Sie Ihre Website-Adresse ein, falls Sie eine haben
Beschreiben Sie kurz, wie Sie Ihre Dienste an Ihre Kunden verkaufen wollen. Zum Beispiel: Nutzer in Foren ansprechen.

Wir verwenden Cookies!

Wir verwenden Cookies, um Ihre Browser-Erfahrung zu verbessern, personalisierte Anzeigen oder Inhalte bereitzustellen und unseren Traffic zu analysieren. Mit einem Klick auf „Akzeptieren“ stimmen Sie der Nutzung von Cookies zu.