Zum Hauptinhalt springen Skip to page footer

Schritte nach der Installation der Docker-Engine unter Ubuntu 22.04

| Tutorial

Dieses Tutorial erklärt die optionalen Schritte nach der Installation von Docker. Es zeigt, wie Sie Ihren Linux-Host konfigurieren können, um die Zusammenarbeit mit Docker zu verbessern.

Verwalten von Docker als Nicht-Root-Benutzer

Der Docker-Daemon bindet sich an einen Unix-Socket, nicht an einen TCP-Port. Standardmäßig gehört der Unix-Socket dem Benutzer root, und andere Benutzer können nur mit sudo darauf zugreifen. Der Docker-Daemon wird immer als root ausgeführt.

Wenn Sie den Docker-Daemon nicht mit sudo starten wollen, erstellen Sie eine Unix-Gruppe namens docker und fügen Sie einen Benutzer hinzu. Wenn der Docker-Daemon startet, erstellt er einen Unix-Socket, auf den die Mitglieder der Docker-Gruppe zugreifen können. Bei einigen Linux-Distributionen erstellt das System diese Gruppe automatisch, wenn die Docker-Engine mit Hilfe eines Paketmanagers installiert wird. In diesem Fall muss die Gruppe nicht manuell erstellt werden.

Warnung

Die Docker-Gruppe gibt dem Benutzer Root-Rechte. Einzelheiten darüber, wie sich dies auf die Sicherheit Ihres Systems auswirkt, finden Sie unter “Docker Daemon Attack Surface”.

Hinweis

Informationen zum Ausführen von Docker ohne Root-Rechte finden Sie unter Ausführen des Docker-Daemons als Benutzer ohne Root-Rechte (Rootless Mode).

Benutzer anlegen

Erstellen Sie einen neuen Benutzer mit dem Befehl adduser. In diesem Tutorial wird der Benutzer “duser” erstellt.
adduser duser
Anschließend werden Sie aufgefordert ein Passwort einzugeben, dieses zu wiederholen und weitere optionale Parameter wie Vor- und Nachname (Fullname) usw. anzugeben:
Adding user `duser' ...
Adding new group `duser' (1000) ...
Adding new user `duser' (1000) with group `duser' ...
Creating home directory `/home/duser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for duser
Enter the new value, or press ENTER for the default
        Full Name []: Docker User
        Room Number []: 000
        Work Phone []: 000
        Home Phone []: 000
        Other []: 000
Is the information correct? [Y/n]

Erstellen Sie die Docker-Gruppe und fügen Ihren Benutzer hinzu:

1. Erstellen Sie die Docker-Gruppe.
sudo groupadd docker
Wenn Sie die folgende Ausgabe sehen, existiert die Gruppe bereits:
groupadd: group 'docker' already exists
2. Fügen Sie Ihren Benutzer zur Docker-Gruppe hinzu.
sudo usermod -aG docker duser
3. Melden Sie sich ab und wieder an, damit Ihre Gruppenzugehörigkeit neu bewertet wird.

Hinweis

Wenn Sie Linux in einer virtuellen Maschine ausführen, kann es erforderlich sein, die virtuelle Maschine neu zu starten, damit die Änderungen wirksam werden.

Sie können auch den folgenden Befehl ausführen, um die Änderungen an den Gruppen zu aktivieren:
newgrp docker
4. Wechseln Sie in die Identität des Benutzers duser:
su duser
5. Prüfen Sie, ob Sie Docker-Befehle ohne sudo ausführen können.
docker run hello-world
Dieser Befehl lädt ein Testbild herunter und führt es in einem Container aus. Wenn der Container ausgeführt wird, gibt er eine Meldung aus und beendet sich:
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Führen Sie den Docker-Daemon als Nicht-Root-Benutzer aus (Rootless-Modus)

Der Rootless-Modus ermöglicht die Ausführung des Docker-Daemons und der Container als Nicht-Root-Benutzer, um potenzielle Schwachstellen im Daemon und in der Container-Runtime zu reduzieren.

Der Rootless-Modus erfordert auch keine Root-Rechte während der Installation des Docker-Daemons, sofern die Voraussetzungen erfüllt sind.

Wie funktioniert das?

Im Rootless-Modus werden der Docker-Daemon und die Container innerhalb eines Benutzernamensraums ausgeführt. Dies ist dem userns-remap-Modus sehr ähnlich, mit dem Unterschied, dass im userns-remap-Modus der Daemon selbst mit Root-Rechten ausgeführt wird, während im Rootless-Modus sowohl der Daemon als auch der Container ohne Root-Rechte ausgeführt werden.

Im Rootless-Modus werden keine Binärdateien mit SETUID-Bits oder Dateifähigkeiten verwendet, mit Ausnahme von newuidmap und newgidmap, die erforderlich sind, um die Verwendung mehrerer UIDs/GIDs im Benutzernamensraum zu ermöglichen.

Voraussetzungen

  • Sie müssen newuidmap und newgidmap auf dem Host installieren. Diese Befehle werden auf den meisten Distributionen durch das uidmap-Paket bereitgestellt.
  • /etc/subuid und /etc/subgid sollten mindestens 65.536 untergeordnete UIDs/GIDs für den Benutzer enthalten. Im folgenden Beispiel hat der Benutzer duser 65.536 untergeordnete UIDs/GIDs (100000-165536).
$ id -u
1000
duser@ubuntu:/root$ whoami
duser
duser@ubuntu:/root$ grep ^$(whoami): /etc/subuid
duser:100000:65536
duser@ubuntu:/root$ grep ^$(whoami): /etc/subgid
duser:100000:65536
Installieren Sie das Paket dbus-user-session, falls es noch nicht installiert ist. Führen Sie aus und melden Sie sich anschließend erneut an.
sudo apt-get install -y dbus-user-session

Bekannte Einschränkungen

  • Es werden nur die folgenden Speichertreiber unterstützt:
    • overlay2 (nur wenn mit Kernel 5.11 oder höher oder mit einem Ubuntu-Kernel ausgeführt)
    • fuse-overlayfs (nur wenn mit Kernel 4.18 oder höher und fuse-overlayfs installiert ist)
    • btrfs (nur wenn es mit Kernel 4.18 oder später läuft, oder ~/.local/share/docker mit der Einhängeoption user_subvol_rm_allowed eingehängt ist)
    • vfs
  • Cgroup wird nur unterstützt, wenn es mit cgroup v2 und systemd ausgeführt wird. Siehe Begrenzung von Ressourcen.
  • Die folgenden Funktionen werden nicht unterstützt:
    • AppArmor
    • Prüfpunkt
    • Overlay-Netzwerk
    • Offenlegung von SCTP-Ports
  • Zur Verwendung des ping-Befehls siehe Routing von ping-Paketen.
  • Um privilegierte TCP/UDP-Ports (< 1024) freizugeben, siehe Freigeben von privilegierten Ports.
  • Die in docker inspect angezeigte IPAddress befindet sich im Netzwerk-Namensraum von RootlessKit. Das bedeutet, dass die IP-Adresse ohne nsenter-ing in den Netzwerk-Namensraum vom Host nicht erreichbar ist.
  • Das Host-Netzwerk (docker run --net=host) ist ebenfalls im RootlessKit-Namensraum enthalten.
  • NFS-Mounts als Docker-"data-root" werden nicht unterstützt. Diese Einschränkung ist nicht spezifisch für den Rootless-Modus.

Installation

Hinweis

Wenn der systemweite Docker-Dämon bereits läuft, sollten Sie ihn deaktivieren: 

sudo systemctl disable --now docker.service docker.socket

Wenn Sie Docker 20.10 oder höher mit RPM/DEB-Paketen installiert haben, sollten Sie die Datei dockerd-rootless-setuptool.sh im Verzeichnis /usr/bin zur Verfügung haben.

Führen Sie den folgenden Befehl als Nicht-Root-Benutzer (duser) aus, um den Daemon einzurichten:
dockerd-rootless-setuptool.sh install
Sollten Sie folgende Fehlermeldung erhalten wurden die bereits oben erwähnten Binaries newuidmap und newgidmap noch nicht installiert:
[ERROR] Missing system requirements. Run the following commands to
[ERROR] install the requirements and run this tool again.

########## BEGIN ##########
sudo sh -eux <<EOF
# Install newuidmap & newgidmap binaries
apt-get install -y uidmap
EOF
########## END ##########
Installieren Sie in diesem Fall das noch fehlende Paket als root oder sudo:
sudo apt-get install -y uidmap
Führen Sie den noch einmal folgenden Befehl als Nicht-Root-Benutzer (duser) aus:
dockerd-rootless-setuptool.sh install
Ausgabe:
[INFO] systemd not detected, dockerd-rootless.sh needs to be started manually:

PATH=/usr/bin:/sbin:/usr/sbin:$PATH dockerd-rootless.sh

[INFO] Creating CLI context "rootless"
Successfully created context "rootless"
[INFO] Using CLI context "rootless"
Current context is now "rootless"

[INFO] Make sure the following environment variable(s) are set (or add them to ~/.bashrc):
# WARNING: systemd not found. You have to remove XDG_RUNTIME_DIR manually on every logout.
export XDG_RUNTIME_DIR=/home/duser/.docker/run
export PATH=/usr/bin:$PATH

[INFO] Some applications may require the following environment variable too:
export DOCKER_HOST=unix:///home/duser/.docker/run/docker.sock