Intelligente Lösungen
in neuer Dimension

Ubuntu: Docker installieren

Unsere Arbeitplatzrechner haben üblicherweise relativ knapp dimensionierte Dateisysteme. Wir wollen damit verhindern, dass sich “Müll” ansammelt der dann unsere Sicherungen aufbläht.

Docker braucht einen Speicherbereich für die Images. Der muß relativ groß sein. Wir legen diesen separat an und nehmen ihn von den Sicherungen aus.

Speicherbereich anlegen

Belegung ermitteln

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# sudo vgdisplay ubuntu-vg
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  8
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                5
  Open LV               5
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               929,49 GiB
  PE Size               4,00 MiB
  Total PE              237950
  Alloc PE / Size       95744 / 374,00 GiB
  Free  PE / Size       142206 / 555,49 GiB
  VG UUID               SnH8Nq-Pe3a-Reoz-l5zt-AFpl-e4ZF-lvfDga

Bei mir sind über 500G verfügbar!

Größe festlegen

Ich verwende 50G für den Docker-Speicherbereich! Die Größe muß geringer sein als der verfügbare Bereich!

1
# SIZE=50G

LV anlegen

1
# sudo lvcreate -L ${SIZE} -n datalv ubuntu-vg

Dateisystem anlegen

1
# sudo mkfs.btrfs /dev/mapper/ubuntu--vg-datalv

Dateisystem einbinden

  • Datei /etc/fstab erweitern:
1
+/dev/mapper/ubuntu--vg-datalv /data btrfs    defaults        0       2
  • Einbindeverzeichnis anlegen: sudo mkdir /data
  • Dateisystem einbinden: sudo mount /data

Docker-Bereich anlegen und verknüpfen

1
2
# sudo mkdir /data/docker
# sudo ln -s /data/docker /var/lib/docker

Docker einspielen

1
# sudo apt install docker.io

Docker-Konfiguration sichten

1
2
3
4
5
6
7
8
$ sudo docker info
...
 Storage Driver: btrfs
  Build Version: Btrfs v5.4.1
  Library Version: 102
...
 Docker Root Dir: /data/docker
...

Idealerweise sieht man, dass

  • als Dateisystem BTRFS verwendet wird
  • als Speicherbereich der zuvor angelegte Bereich “/data/docker” verwendet wird

Kurztest

1
2
3
4
5
6
7
$ sudo docker run -it alpine /bin/sh
/ # cat /etc/issue
Welcome to Alpine Linux 3.16
Kernel \r on an \m (\l)

/ # exit
$

Benutzer für Docker freischalten

ACHTUNG: Ich rate von dieser Freischaltung dringend ab, u.a. weil dann sehr leicht beliebige Programme unter der Benutzerkennung “root” ausgeführt werden können! Wenn Du den vorgenannten Satz nicht 100%ig verstehst, dann überspringe bitte diesen Abschnitt!

Mit den nachfolgenden Schritten kann ein Benutzer für die Nutzung von Docker freigeschaltet werden. Dadurch muß nicht jedesmal sudo docker ... eingegeben werden.

1
# sudo usermod -aG docker uli

Danach: Ab- und wieder Anmelden!

Nachkontrolle:

1
2
$ id
uid=1000(uli) gid=1000(uli) Gruppen=1000(uli),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),131(lxd),132(sambashare),139(docker)

Test

1
2
3
4
5
6
7
$ docker run -it alpine /bin/sh
/ # cat /etc/issue
Welcome to Alpine Linux 3.16
Kernel \r on an \m (\l)

/ # exit
$

Problem

Mit nachfolgendem Befehl wird “uli” zu “root” ohne die Eingabe von einem Kennwort:

1
2
3
4
5
6
7
8
9
$ docker run -it --privileged --net host --ipc=host -v /:/host alpine chroot /host
groups: cannot find name for group ID 11
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

root@uli-desktop:/# id
uid=0(root) gid=0(root) groups=0(root),1(daemon),2(bin),3(sys),4(adm),6(disk),10(uucp),11,20(dialout),26(tape),27(sudo)
root@uli-desktop:/# exit
$

Konkret wird dies zu einer Gefahr, wenn man Shell-Skripte “untergeschoben” bekommt. Eigentlich muß man jedes Skript vorher sichten um sicher zu sein, dass es nix böses macht!

Änderungen

  • 2023-01-12 – Warnung bei Docker-Gruppe deutlicher hervorgehoben
  • 2022-08-16 – Tests
  • 2022-08-15 – Warnung bei Docker-Gruppe
  • 2021-10-12 – Erste Version