Nach wie vor verwenden wir, für die meisten Anleitungen, Docker zusammen mit Docker Compose. Inzwischen ist von Docker Compose Version 2 erschienen. Mailcow hat bereits in einem der letzten Updates angekündigt zukünftig nur noch auf Docker Compose v2 zu setzten. Also ist es an der Zeit, dass wir uns dem hier widmen.
0. Versionierung
Datum | Änderung |
---|---|
22.12.2022 | Überprüfen der Anleitung |
1. Voraussetzung
Um Docker zu installieren benötigen wir die 64-Bit-Version von Debian bzw. Raspbian. Die Docker Engine unterstützt auch x86_64
(bzw. amd64
), armhf
und arm64
.
2. Deinstallieren von alten Versionen
Im nächsten Schritt entfernen wir die ggf. vorhandenen alten Versionen von Docker.
Keine Sorge! Die Inhalte von /var/lib/docker/
, einschließlich Images, Container, Volumes und Netzwerke, bleiben uns erhalten.
sudo apt remove docker docker-engine docker.io containerd runc
Wenn es sich um eine frische Ubuntu-Installation handelt wird uns der Befehl einen Fehler auswerfen, da nichts installiert ist. Diesen Fehler können wir einfach ignorieren.
3. Docker-Repository hinzufügen
3.1. Alte Sourcenliste entfernen
Um uns nun die aktuelle Docker-Version installieren zu können müssen wir erst mal das aktuelle Docker-Repository hinzufügen. Dazu löschen wir erst mal eventuell alte vorhandene Repositories:
sudo rm /etc/apt/sources.list.d/docker.list
Wenn es sich um eine frische Ubuntu-Installation handelt wird uns der Befehl einen Fehler auswerfen, da diese Datei nicht vorhanden ist. Diesen Fehler können wir einfach ignorieren.
3.2. Grundvoraussetzungen überprüfen
Je nach Systemzustand kann es sein, dass wir Debian erstmal in die Lage versetzten müssen sich die aktuellen Pakete via HTTPS zu ziehen. So führen wir folgenden System aus um sicher zu stellen, dass die Grundvoraussetzungen alle vorhanden sind oder ggf. installiert werden.
Aktuelle Paketliste aktualisieren
sudo apt update
Alle notwendigen Pakete installieren:
sudo apt install ca-certificates curl gnupg lsb-release
Normal sollten wir alle Grundvoraussetzungen selbst bei einer Minimal-Version erfüllen.
3.3. Schlüssel hinzufügen
In diesem Schritt laden wir uns den aktuellen PGP-Schlüssel von Docker herunter und stellen ihn auf unserer Maschine zur Verfügung.
Verzeichnis anlegen:
sudo mkdir -p /etc/apt/keyrings
Schlüssel holen und in das Verzeichnis einfügen:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg
3.4. Repository hinzufügen
Nun fügen wir noch das aktuelle Repository von Docker hinzu:
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4. Docker und Docker Compose installieren
Jetzt haben wir alle Vorraussetzungen geschaffen um die aktuellste Version von Docker zu installieren. Das folgende Funktioniert unter x86_64
/ amd64
, armhf
, arm64
, and Raspbian
. Zu erst aktualisieren wir nochmals die Paketliste:
sudo apt update
Und installieren dann Docker und Docker Compose:
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Version 2 von Docker Compose versteckt sich hinter dem Paket docker-compose-plugin
.
sudo docker --version && docker compose version
So oder so ähnlich sollte die Ausgabe sein:
jonathan@xxx:~$ docker --version && sudo docker compose version Docker version 20.10.17, build 100c701 Docker Compose version v2.6.0
5. Nach der Installation
5.1. Nicht-Root-Benutzer
Grundsätzlich wird Docker an den root
-User gebunden. Also müssten wir nun immer mit sudo
arbeiten. Allerdings möchten wir eigentlich Docker auch durch einen Nicht-Root-Benutzer ausführen um uns die ständige Passworteingabe zu sparen.
Wichtiger Hinweis: Die Docker-Gruppe gewährt die gleichen Rechte wie der Benutzer root
. Das kann sich auf die Sicherheit des Systems auswirken.
Wir erstellen eine docker
Gruppe:
sudo groupadd docker
In der Regel sollte diese bereits existieren. Dann fügen wir unseren Benutzer dieser Gruppe hinzu:
sudo usermod -aG docker $USER
Einmal ausloggen, wieder einloggen und testen via:
docker run hello-world
5.2. Docker mit dem System starten
Die meisten aktuellen Linux-Distributionen (RHEL, CentOS, Fedora, Debian, Ubuntu 16.04 und höher) verwenden systemd, um zu verwalten, welche Dienste beim Booten des Systems gestartet werden. Unter Debian und Ubuntu ist der Docker-Dienst standardmäßig so konfiguriert, dass er beim Booten gestartet wird. Falls wir trotzdem mal diese Funktion manuel ausführen müssten.
Hinzufügen der Dienste zum Boot:
sudo systemctl enable docker.service sudo systemctl enable containerd.service
Deaktivieren des Dienstes beim Booten:
sudo systemctl disable docker.service sudo systemctl disable containerd.service
5.3. IPv6 für Docker aktivieren (optimal)
Wir werden uns darauf Einstellen, dass wir immer mehr mit IPv6 arbeiten und viele Serverangebote beinhalten bereits einen IPv6-Adressbereich. Diesen können wir auch für Docker anwenden. Aktuell funktioniert IPv6 bei Docker ausschlieslich auf Linuxmaschinen.
Konfigurationsdatei öffnen:
sudo nano /etc/docker/daemon.json
Inhalt um folgendes ergänzen:
{ "ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64" // IPv6-Bereich auf euren Bereich anpassen! }
Der Kommentar // IPv6-Bereich auf euren Bereich anpassen!
muss entfernt werden!
Jetzt muss nur noch Docker die neue Konfiguration laden:
sudo systemctl reload docker
Nun können wir auch IPv6 Netzwerke innerhalb Docker verwenden. Zum Beispiel fragt Mailcow bei jedem Update ob man seine Konfiguration um IPv6 erweitern möchte. Das würde nun funktionieren.
6. Docker Compose v2
Selbstverständlich hat sich viel unter der Haube von Docker Compose getan. Die wichtigste Änderung für uns ist das der Befehl ohne -
auskommt!
docker compose up
Hat schon jemand den Docker Rootless Mode versucht?
Hallo, mein Docker hat auf einmal aufgehört zu starten.
Es kommt folgende Fehlermeldung:
21:18
docker.socket: Failed with result ‘service-start-limit-hit’.
Habts ihr eine Ahnung woran das liegen kann und wie ich es beheben kann?