Home ITHome ServerDocker auf AlmaLinux und Rocky Linux installieren

Docker auf AlmaLinux und Rocky Linux installieren

by dr
0 Kommentare

Wer Docker auf AlmaLinux oder Rocky Linux installiert, stößt auf drei Dinge, die es auf Debian und Ubuntu nicht gibt: Docker listet diese Distributionen offiziell gar nicht, Podman ist schon installiert und steht im Weg, und SELinux verhindert später, dass Container auf deine Daten zugreifen – mit einer Fehlermeldung, die in die falsche Richtung zeigt.

Diese Anleitung behandelt alle drei Punkte. Sie gilt für AlmaLinux 10 und 9, Rocky Linux 10 und 9, RHEL selbst sowie CentOS Stream – die Befehle sind in dieser Familie identisch.

Transparenzhinweis: Diese Anleitung folgt Dockers offizieller Dokumentation für die RHEL-Familie, Stand September 2026. Anders als unsere Debian-, Ubuntu- und Arch-Anleitung konnten wir sie nicht auf einem eigenen System nachprüfen.

Vorab: Was ist eigentlich aus CentOS geworden?

Diese Frage steht hinter den meisten Suchanfragen zu diesem Thema, deshalb zuerst die klare Antwort.

CentOS Linux ist beendet. Version 8 wurde 2021 vorzeitig eingestellt, Version 7 lief im Juni 2024 aus. Was heute „CentOS“ heißt, ist CentOS Stream – und das ist etwas anderes: Stream läuft Red Hat Enterprise Linux voraus, ist also eine Vorstufe statt eines stabilen Nachbaus. Für Entwicklung sinnvoll, für einen Server, der jahrelang unverändert laufen soll, die falsche Wahl.

Die tatsächlichen Nachfolger sind:

Distribution Verhältnis zu RHEL Geeignet für
AlmaLinux binärkompatibler Nachbau, von einer Stiftung getragen Server, die lange stabil laufen sollen
Rocky Linux binärkompatibler Nachbau, vom CentOS-Mitbegründer gestartet dasselbe – die Wahl ist Geschmackssache
CentOS Stream Vorstufe von RHEL Entwicklung, Testen kommender RHEL-Versionen
RHEL das Original, kostenpflichtig Unternehmen mit Supportbedarf

Wenn du von CentOS 7 kommst und einen Ersatz suchst: AlmaLinux oder Rocky, beide mit Support bis weit in die 2030er. Welche von beiden, ist fast beliebig – sie sind technisch nahezu identisch.

Das Wichtigste in Kürze

  • Docker listet Alma und Rocky nicht – du nutzt das CentOS-Repository, weil die Distributionen binärkompatibel sind.
  • Podman muss weg oder bewusst nebeneinander betrieben werden.
  • Der Dienst startet nicht von allein – systemctl enable --now docker ist Pflicht.
  • SELinux verlangt bei eingebundenen Verzeichnissen ein :Z – ohne das scheitern Container mit „Permission denied“.
  • Die Firewall heißt hier firewalld, nicht ufw.

Schritt 1: Podman und alte Pakete entfernen

Red Hat setzt auf Podman, eine eigene Container-Lösung – die ist bei AlmaLinux und Rocky in der Server-Installation meist schon dabei. Besonders das Paket podman-docker ist ein Problem: Es legt einen Befehl namens docker an, der eigentlich Podman aufruft. Installierst du daneben das echte Docker, hast du zwei Programme, die um denselben Namen streiten.

Prüfen, was vorhanden ist:

rpm -qa | grep -E 'podman|docker|containerd|runc'

Dann Docker-Altlasten entfernen:

sudo dnf remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine

Und, falls vorhanden, die Docker-Fassade von Podman:

sudo dnf remove podman-docker

Musst du Podman selbst entfernen? Nein. Podman und Docker können nebeneinander laufen – sie nutzen getrennte Verzeichnisse und Sockets. Nur podman-docker darf nicht bleiben. Wenn du Podman gar nicht nutzt, kannst du es mit sudo dnf remove podman loswerden; einige Systemwerkzeuge hängen allerdings davon ab, deshalb vorher lesen, was dnf mitentfernen würde.

Schritt 2: Paketquelle einrichten

Hier der Punkt, über den man Bescheid haben sollte: Docker dokumentiert AlmaLinux und Rocky nicht. Die offiziellen Anleitungen kennen CentOS Stream, Fedora und RHEL. Weil Alma und Rocky binärkompatibel zu RHEL sind, funktioniert das CentOS-Repository trotzdem – das ist der etablierte Weg, den auch die Distributionen selbst empfehlen.

sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Auf neueren dnf-Versionen lautet der zweite Befehl:

sudo dnf config-manager addrepo --from-repofile=https://download.docker.com/linux/centos/docker-ce.repo

Meldet der erste Aufruf einen Syntaxfehler, nimm den zweiten – dnf5 hat die Aufrufweise geändert.

Prüfen, ob die Quelle da ist:

dnf repolist | grep docker

Und weil die Repo-Datei eine Variable für die Versionsnummer enthält, lohnt ein Blick, ob sie richtig aufgelöst wird:

dnf repoinfo docker-ce-stable | grep -i baseurl

Dort muss eine Adresse mit deiner Hauptversion stehen, etwa .../centos/10/x86_64/stable. Erscheint stattdessen ein unaufgelöstes $releasever oder eine Version, die es bei Docker nicht gibt, hilft ein fester Wert:

sudo dnf config-manager --setopt=docker-ce-stable.baseurl=https://download.docker.com/linux/centos/9/x86_64/stable --save

Schritt 3: Installieren und starten

sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Beim ersten Mal fragt dnf nach dem GPG-Schlüssel. Der Fingerabdruck muss lauten:

060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35

Achtung, anderer Schlüssel: Für die RPM-Pakete nutzt Docker einen anderen Schlüssel als für Debian und Ubuntu. Wer den Debian-Fingerabdruck erwartet, wundert sich zu Recht.

Und nun der Schritt, den die Debian-Familie automatisch erledigt und diese nicht:

sudo systemctl enable --now docker

Kontrolle:

systemctl is-enabled docker   # enabled
systemctl is-active docker    # active
docker --version
docker compose version

Ohne diesen Befehl ist Docker installiert, aber nichts läuft – und docker ps meldet, es könne den Daemon nicht erreichen. Das ist die häufigste Verwirrung in dieser Distributionsfamilie.

Schritt 4: Funktionstest und Rechte

sudo docker run --rm hello-world
sudo usermod -aG docker $USER

Danach abmelden und neu anmelden; in der laufenden Sitzung greift die Gruppe nicht. Für ein einzelnes Terminal genügt newgrp docker.

Zur Einordnung: Die Gruppe docker entspricht Root-Rechten auf dem ganzen System. Auf Servern mit mehreren Benutzern ist das eine bewusste Entscheidung, keine Formalie.

SELinux: die Falle, die alle erwischt

Jetzt der Abschnitt, der diesen Artikel von generischen Docker-Anleitungen unterscheidet. AlmaLinux und Rocky haben SELinux im erzwingenden Modus aktiv – anders als Debian und Ubuntu.

Prüfen:

getenforce

Kommt Enforcing zurück, gilt das Folgende für dich.

Das Symptom

Du bindest ein Verzeichnis des Wirts in einen Container ein:

docker run -d -v /srv/daten:/var/www/html nginx:alpine

Der Container startet, aber die Anwendung darin kann die Dateien nicht lesen – Permission denied, obwohl die Rechte auf dem Wirt einwandfrei sind. Man prüft dann Besitzer und Rechte, findet nichts und dreht sich im Kreis.

Die Ursache

SELinux vergibt jeder Datei zusätzlich zu den normalen Rechten eine Kennzeichnung. Container dürfen nur auf Dateien mit passender Kennzeichnung zugreifen. Dein Verzeichnis /srv/daten trägt die Kennzeichnung des Wirts, nicht die für Container – also verweigert SELinux den Zugriff. Sichtbar wird das nicht in der Docker-Ausgabe, sondern im Prüfprotokoll:

sudo ausearch -m AVC -ts recent

Die Lösung

Ein Suffix an der Volume-Angabe lässt Docker die Kennzeichnung setzen:

docker run -d -v /srv/daten:/var/www/html:Z nginx:alpine

In der Compose-Datei genauso:

services:
  web:
    image: nginx:alpine
    volumes:
      - /srv/daten:/var/www/html:Z
    ports:
      - "127.0.0.1:8080:80"

Der Unterschied zwischen den beiden möglichen Suffixen:

Suffix Wirkung Wann
:Z Kennzeichnung privat für diesen einen Container Standardfall – nur ein Container nutzt das Verzeichnis
:z Kennzeichnung geteilt zwischen Containern Mehrere Container greifen auf dasselbe Verzeichnis zu

Eine ernste Warnung: Setze :Z niemals auf Systemverzeichnisse wie /, /usr, /etc oder /home. Docker ändert dabei die Kennzeichnung aller darin liegenden Dateien – bei einem Systemverzeichnis machst du damit das Betriebssystem unbrauchbar. Nur eigene Datenverzeichnisse.

Und was du nicht tun solltest: SELinux abschalten. Man liest das oft als „Lösung“, und es funktioniert – man wirft dabei aber eine Schutzschicht weg, die einer der Gründe ist, warum man diese Distributionen auf Servern einsetzt. Das Suffix kostet drei Zeichen.

firewalld und Container-Ports

In dieser Familie heißt die Firewall firewalld. Der Grundsatz bleibt aber derselbe wie überall: Veröffentlichte Container-Ports umgehen sie. Docker schreibt seine Weiterleitungsregeln vor die der Firewall, also wird ein Dienst mit "8080:80" im Netz erreichbar, auch wenn firewalld den Port nicht freigibt.

Zustand prüfen:

sudo firewall-cmd --state
sudo firewall-cmd --list-all
sudo firewall-cmd --get-zone-of-interface=docker0

Die wirksame Absicherung ist dieselbe wie auf allen Systemen – eine Adresse vor dem Port:

    ports:
      - "127.0.0.1:8080:80"

Damit horcht der Dienst nur lokal, und du stellst einen Reverse Proxy davor, wenn er ins Netz soll. Wer veröffentlichte Ports behalten will, setzt Regeln in der Kette DOCKER-USER; ausführlich mit Nachweis steht das in unserer Ubuntu-Anleitung.

Wichtige Dateien und Verzeichnisse

Pfad Bedeutung
/var/lib/docker Abbilder, Container, Volumes
/etc/docker/daemon.json Konfiguration; existiert standardmäßig nicht
/etc/yum.repos.d/docker-ce.repo Die Paketquelle aus Schritt 2
/var/run/docker.sock Der Socket zwischen Befehl und Dienst

Bei RHEL-Systemen liegt /var häufig in einer eigenen, knapp bemessenen LVM-Partition. Prüfe vor dem ersten größeren Einsatz mit df -h /var/lib/docker, ob genug Platz da ist – Abbilder summieren sich schnell auf mehrere Gigabyte.

Hardware für den RHEL-kompatiblen Server

AlmaLinux und Rocky landen meist auf Systemen, die jahrelang durchlaufen sollen – da lohnt ordentlicher Speicher.

* Affiliate-Links: Als Amazon-Partner verdienen wir an qualifizierten Käufen. Bitte prüfe die Kompatibilität mit deinem System.

Häufige Fragen

Soll ich nicht einfach Podman nehmen?

Ein fairer Gedanke. Podman ist in dieser Familie zu Hause, läuft ohne dauerhaften Dienst und ohne Root-Rechte – sicherheitstechnisch die sauberere Lösung. Der Grund für Docker ist das Umfeld: Nahezu jede Anleitung, jede compose.yaml und jedes Projekt im Netz geht von Docker aus. Podman kann das meiste davon nachbilden, aber nicht alles reibungslos. Wenn du Fertigrezepte aus dem Netz nutzen willst, ist Docker der Weg des geringeren Widerstands.

Gilt die Anleitung auch für CentOS Stream?

Ja, die Befehle sind identisch – Stream ist ja das von Docker offiziell dokumentierte System. Überlege nur, ob Stream für deinen Zweck das Richtige ist; für einen stabilen Server sind Alma oder Rocky die bessere Wahl.

Und für Fedora?

Fast. Fedora hat ein eigenes Docker-Repository (/linux/fedora/docker-ce.repo) statt des CentOS-Pfads. Der Rest, inklusive SELinux-Suffix und systemctl enable --now, ist gleich.

docker ps meldet, der Daemon sei nicht erreichbar.

Fast immer fehlt sudo systemctl enable --now docker. In dieser Familie startet kein Paket seinen Dienst von selbst.

Mein Container kommt nicht an die eingebundenen Dateien.

SELinux. Ergänze :Z an der Volume-Angabe – siehe den Abschnitt oben.

Wie aktualisiere ich Docker?

sudo dnf upgrade holt neue Versionen über die eingerichtete Quelle. Laufende Container werden beim Neustart des Dienstes kurz unterbrochen; mit restart: unless-stopped kommen sie von allein zurück.

Wie entferne ich Docker vollständig?

sudo systemctl disable --now docker
sudo dnf remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -rf /var/lib/docker /var/lib/containerd

Der letzte Befehl löscht alle Abbilder, Container und Volumes unwiderruflich.

Fazit

Die Installation selbst ist kurz: Paketquelle hinzufügen, fünf Pakete installieren, Dienst aktivieren. Was diese Distributionsfamilie eigen macht, sind die drei Dinge davor und danach – Podmans Docker-Fassade entfernen, den Dienst von Hand starten und SELinux mit :Z bedienen.

Besonders der letzte Punkt kostet Zeit, wenn man ihn nicht kennt: Eine Fehlermeldung über fehlende Rechte, obwohl die Rechte stimmen, führt zuverlässig in die falsche Richtung. Wer einmal weiß, dass drei Zeichen an der Volume-Angabe fehlen, verliert dort keinen Abend mehr.

Alle Anleitungen im Überblick: Docker auf jedem System installieren.

You may also like

Hinterlasse einen Kommentar