Der Einsatz von Docker erfreut sich steigender Beliebtheit.
Diese Seite gibt Hilfestellungen und Hinweise zum Betrieb von Docker-Containern an der FAU.
Inhalt
Schnellzugriff auf wichtige Themen:
- Docker-Netzwerk einrichten (Wichtig!)
vermeidet Probleme durch IP-Kollisionen im FAU Netz - Dockerhub-Mirror einrichten
vermeidet Probleme durch Rate-Limiting von Dockerhub ab 1.4.2025
Voraussetzungen
Die offizielle Anleitung zur Installation von Docker finden Sie unter https://docs.docker.com/engine/install/ubuntu/.
Das RRZE bietet auch einen APT Mirror des Docker Repositories an, der wie folgt genutzt werden kann:
Pakete für Ubuntu 24.04 (jammy)
echo "deb [arch=amd64 by-hash=no] http://homespun.rrze.uni-erlangen.de/mirror/download.docker.com/linux/ubuntu noble stable" | sudo tee /etc/apt/sources.list.d/rrze-mirror-docker.list curl -fsSL http://homespun.rrze.uni-erlangen.de/mirror/download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo DEBIAN_FRONTEND=noninteractive apt-get install docker-ce
Pakete für Ubuntu 22.04 (jammy)
echo "deb [arch=amd64 by-hash=no] http://homespun.rrze.uni-erlangen.de/mirror/download.docker.com/linux/ubuntu jammy stable" | sudo tee /etc/apt/sources.list.d/rrze-mirror-docker.list curl -fsSL http://homespun.rrze.uni-erlangen.de/mirror/download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo DEBIAN_FRONTEND=noninteractive apt-get install docker-ce
Pakete für Ubuntu 20.04 (focal)
echo "deb [arch=amd64 by-hash=no] http://homespun.rrze.uni-erlangen.de/mirror/download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/rrze-mirror-docker.list curl -fsSL http://homespun.rrze.uni-erlangen.de/mirror/download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo DEBIAN_FRONTEND=noninteractive apt-get install docker-ce
Konfiguration
Hier finden Sie wichtige Hinweise zur korrekten Konfiguration Ihres Docker-Setups im FAU Netz.
Docker Bridge/Netzbereich
Bitte den verwendeten Adressbereich unbedingt wie unten beschrieben konfigurieren.
Es gibt Netze an der FAU, die mit dem Default-Adressbereich kollidieren!
Docker verwendet ein eigenes Subnetz das über die Docker-Bridge docker0 mit dem restlichen Netzwerk kommuniziert.
Standardmäßig verwendet dieses Subnetz den Adressbereich 172.17.0.0/16
Um Kollisionen mit bereits verwendeten Adressbereichen auszuschließen wird empfohlen einen Bereich aus nicht-routbaren LinkLocal Adressen für Docker zu verwenden (zB 169.254.254.1/24
).
Probleme mit DELL idrac beheben
Das bei DELL Servern integrierte Management verwendet ein virtuelles Netzwerkinterface namens idrac
zur Kommunikation mit dem Host.
Um Konflikte mit den Docker-Netzen zu verhindern muss die Netzmaske des idrac
Interfaces von /16
auf /24
eingeschränkt werden.
Die nötigen Änderungen können in netplan
wie folgt konfiguriert werden:
bash$ cat << EOF | sudo tee -a /etc/netplan/02-idrac.yaml network: version: 2 renderer: networkd ethernets: idrac: addresses: [169.254.0.2/24] EOF bash$ sudo netplan apply
Um den Netzbereich anzupassen sind die folgenden Schritte notwendig.
Ubuntu ab 18.04 (Systemd)
1. Docker-Daemon Konfiguration anpassen
bash$ sudo systemctl edit docker
2. Folgenden Inhalt einfügen
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H unix:// --bip=169.254.254.1/24 # Ende
3. Überprüfen der Konfiguration
bash$ sudo cat /etc/systemd/system/docker.service.d/override.conf ... bash$ sudo systemctl cat docker ...
4. Neustart des Docker-Daemons (ACHTUNG: Startet auch alle Container neu!)
bash$ sudo systemctl restart docker
5. Überprüfen der docker0 IP
bash$ ip address show docker0 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:06:dd:bb:5c brd ff:ff:ff:ff:ff:ff inet 169.254.254.1/24 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:6ff:fedd:bb5c/64 scope link valid_lft forever preferred_lft forever
Das wars 🙂
Docker Daemon / Dockerhub Mirror
Rate Limit bei Dockerhub
Ab 1.4.2025 wird Dockerhub Zugriffe für Pulls beschränken, was an der FAU zu Problemen beim Zugriff auf Dockerhub führen wird (siehe https://docs.docker.com/docker-hub/usage/pulls/).
Um den Nutzern an der FAU weiterhin einen schnellen Zugriff auf Images von Dockerhub zu ermöglichen, stellt das RRZE einen zentralen Dockerhub Mirror bereit. Dieser ist als Pull-Through Cache für Dockerhub Images konfiguriert (siehe auch https://docs.docker.com/docker-hub/image-library/mirror/). Bei Nutzung des zentralen Dockerhub Mirror werden Images über einen zentralen, unlimitierten Account von Dockerhub abgerufen und dann für 180 Tage zwischengespeichert.
Es wird allen Nutzern an der FAU empfohlen die entsprechende Konfiguration zur Nutzung der Dockerhub Mirrors zu verwenden:
sudo tee /etc/docker/daemon.json <<'EOF' { "registry-mirrors": [ "https://dockerhub-mirror3.rrze.uni-erlangen.de", "https://dockerhub-mirror2.rrze.uni-erlangen.de", "https://dockerhub-mirror1.rrze.uni-erlangen.de" ] } EOF sudo systemctl restart docker
Die Reihenfolge der Mirrors kann zur Lastverteilung ggf. verändert werden. Es sollten aber immer alle drei eingetragen werden, da bei Wartungsarbeiten zeitweise auch mal ein Mirror offline sein kann.
Es wird jeweils der erste Mirror verwendet, der eine erfolgreiche Antwort liefert. Als letztes wird automatisch versucht das Image von Dockerhub abzurufen.
Leider ist zum aktuellen Stand nicht bekannt wie man auf Client-Seite einfach prüfen kann, ob die konfigurierten Mirrors erfolgreich verwendet wurden.
Startskripte
Docker-Container mit dem Linux Initsystem starten
Ubuntu ab 18.04 (Systemd)
Als Basis für eigene Anpassungen empfehlen wir zum Beispiel folgendes Init-Skript zum automatischen Anlegen und starten eines neuen Containers basierend auf einem existierenden Docker-Image.
Alle Informationen zum Erstellen des Containers sind im Skript bereits enthalten.
So benötigt man für einfache Setups kein zusätzliches Tool, wie docker-compose
, um die Konfiguration der Container zu verwalten.
1. Startskript erstellen
bash$ cat /etc/systemd/system/docker.openldap.service [Unit] Description=OpenLDAP Requires=docker.service After=docker.service [Service] User=root Restart=on-failure RestartSec=10 ExecStartPre=-/usr/bin/docker stop openldap ExecStartPre=-/usr/bin/docker rm openldap ExecStart=/usr/bin/docker run \ --name openldap \ -h openldap.example.net \ -p 10.20.30.40:389:389 \ -p 10.20.30.40:636:636 \ -v /opt/apps/openldap/logs/:/var/log \ YOUR-REGISTRY/openldap:latest ExecStop=-/usr/bin/docker stop openldap [Install] WantedBy=multi-user.target
2. Starten des Containers
bash$ sudo systemctl daemon-reload bash$ sudo systemctl enable docker.openldap # <-- beim Booten automatisch starten bash$ sudo systemctl start docker.openldap
3. Update des Images von der Registry
bash$ sudo docker pull YOUR-REGISTRY/openldap:latest latest: Pulling from openldap 9fb6c798fa41: Already exists 3b61febd4aef: Already exists .... f93db066217e: Pull complete Digest: sha256:17059dc182304950aab5ca13bb6373b7d7efc0ff7641382cf75cb621f6e7734f Status: Downloaded newer image for YOUR-REGISTRY/openldap:latest bash$ sudo systemctl restart docker.openldap
Rechteverwaltung / docker-Gruppe
Um auch normalen Benutzern – außer root – den Zugriff auf den Docker-Daemon zu gewähren, kann man diese in die Gruppe docker
aufnehmen.
Die docker Gruppe wird nach Installation des Docker Pakets automatisch als lokale Gruppe erstellt.
Danach können Sie Kennungen mit folgendem Kommando zur Gruppe hinzufügen:
bash$ sudo usermod -aG docker $KENNUNG
Damit die Gruppenzugehörigkeit aktiv wird müssen Sie sich neu anmelden!
pam_group (obsolet)
Die folgende Methode fügt eine Benutzerkennung bei der Anmeldung dynamisch zur benötigten lokalen docker
Gruppe hinzu (siehe auch https://help.ubuntu.com/community/LDAPClientAuthentication#Assign_local_groups_to_users).
Sie müssen sich Abmelden und neu Anmelden, damit diese Änderung aktiv wird!
bash$ echo '*;*;[KENNUNG];Al0000-2400;docker' >> /etc/security/group.conf
bash$ cat /etc/security/group.conf ... *;*;[KENNUNG];Al0000-2400;docker