Docker unter Debian 12
Installation des Betriebssystems
Mit der Entscheidung einer kompletten Neuinstallation des HomeLab habe ich beschlossen statt Ubuntu, die aktuelle Version von Debian "Bookworm" als Linux Basis zu verwenden. Da das System Container unter Docker ausführen soll, ist insbesondere die Umgebung mit "snap" unter Ubuntu eher hinderlich und damit überflüssig.
Mit Version 12 hat Debian auch die unfreie Firmware in das Basisimage mit aufgenommen, so dass die NetInstaller ISO alle benötigten Treiber bereits enthält.

Die Installation von Debian lässt sich am einfachsten von einem USB Stick durchführen, der mit Hilfe von "Ventoy" direkt die ISO-Datei "debian-12.0.0-amd64-netinst.iso" starten kann.
Als Freund der Kommandozeile installiere ich mit dem "non-graphical installer".
Language: English
Location: Europe - Germany
Locale: en_US.UTF.8
Keyboard: German
Es sind noch der Hostname und die Domain für den Server anzugeben.
Bei der Einrichtung des Zugangs zum Server gilt zu beachten, dass Debian bei Vergabe eines root Passwords kein "sudo" einrichtet und damit ein direkter root Zugang entsteht, was aus Sicherheitsgründen keine gute Idee ist. Durch die Eingabe eines leeren root Passwords fordert Debian zur Einrichtung eines Benutzers mit Adminrechten auf.
Für die Partitionierung stehen mir zwei SSD zur Verfügung, wobei die NVMe als komplettes Laufwerk mit einer Partition für Debian eingerichtet werden soll - "guided use full disk", "first disk only one partition (ext4, swap)".
Die große SSD wird als "second disk partition" manuell als eine Partition mit dem Filesystem btrfs eingerichtet und unter dem mount point "/var/lib/docker" für die spätere Nutzung von Docker eingehängt.
Mit Auswahl des deutschen Debian Archiv Mirror Servers "deb.debian.org", der Entscheidung keine Nutzungsdaten zu sammeln ("usage survey: no") und der Softwareauswahl ohne Desktopumgebung, aber mit SSH Server und Standard System Utilities ist die Installation des Betriebssystems komplett.
Einrichtung automatischer Updates
Damit der Server stets aktuell bleibt installiere ich noch das Paket für die unbeaufsichtigten Updates.
$ sudo apt install unattended-upgrades
$ sudo dpkg-reconfigure unattended-upgrades
Standardmäßig werden nur Sicherheitsupdates installiert. Ich möchte jedoch auch Softwareupdates erhalten, so dass ich diese in der Datei "50unattended-upgrades" aktiviere:
$ sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
};
Die Anpassung der Datei "20auto-upgrades" sorgt dann noch dafür, dass die Updatelisten wieder aufgeräumt werden.
$ sudo nano /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
Aktivierung der zweiten Netzwerkkarte
Debian hat bei der Installation nur eine der Netzwerkkarten aktiviert. Soll auch die zweite Netzwerkkarte des HomeLab Servers genutzt werden, ist diese in der Datei "interfaces" einzutragen.

$ sudo nano /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eno1
iface eno1 inet dhcp
# The secondary network interface
allow-hotplug enp3s0
iface enp3s0 inet dhcp
Hier wurde das zweite Netzwerkinterface mit dem Namen "enp3s0" für die Nutzung von DHCP eingetragen. Die Netzwerkinterfaces werden u.a. vom Befehl "ip a" aufgelistet. Jetzt ist nur noch das Interface zu aktivieren:
$ sudo ifup enp3s0
Installation von Docker und Docker Compose
Für die Installation von Docker bietet es sich an, die neueste Softwareversion direkt aus dem offiziellen Docker-Repository zu erhalten, anstatt auf deren Aufnahme in die Repositories des jeweiligen Linux Systems zu warten.
Zunächst müssen die Softwarevoraussetzungen installiert sein.
$ sudo apt update
$ sudo apt install ca-certificates curl gnupg
Dann muss der GPG-Schlüssel für Docker und das das Docker-Repository zum Debian System hinzugefügt werden.
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Nach dem Aktualisieren der Repositories erfolgt dann die eigentliche Installation von Docker und dem Docker Compose Plugin "docker compose" in der Version 2. Die Version 1 von Docker Compose "docker-compose" mit Bindestrich (!) gab es nur als Download und nicht als Paket. Sie wird nicht mehr unterstützt.
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Nicht-Root-Benutzer für Docker zulassen
Standardmäßig erlaubt Docker nur dem Benutzer "root", Container auszuführen. Damit ein Nicht-Root-Benutzer Container ausführen kann, muss der Benutzer zur Gruppe "docker" hinzugefügt werden. Mit dem folgenden Befehl wird der aktuelle Benutzer zur Gruppe "docker" hinzugefügt.
$ sudo usermod -aG docker $USER
Nach einer erneuten Anmeldung kann der Benutzer mit dem "docker" Befehl arbeiten.