====== Docker mit BTRFS als Storage ======
===== BTRFS vorbereiten =====
Voraussetzungen:
* kernel unterstützt [[lpi2::btrfs|BTRFS]] ((
modinfo btrfs
modprobe btrfs
grep btrfs /proc/filesystems
-> Sollte bei Debian, Ubuntu und SuSE ''btrfs'' ausgeben. RedHat unterstützt BTRFS nicht.
))
* Paket:
* Debian (ab 12): ''btrfs-progs''
* Freie Partition oder freies Logical Volume
lsblk
mkfs.btrfs /dev/sdaX
-> UUID merken, kommt später in die ''/etc/fstab''
mount -m /dev/sdaX /mnt/btrfs
cd /mnt/btrfs
btrfs subvolume create $(date '+%Y%m%d')00
btrfs subvolume show $(date '+%Y%m%d')00
-> Subvolume ID merken
btrfs subvolume set-default $(date '+%Y%m%d')00
===== containerd Daten ins Docker-Verzeichnis verschieben =====
ab Docker Version 29.0 ist containerd das default Storage Backend
dockerd --version
docker info -f '{{ .DriverStatus }}'
-> enthält: ''driver-type io.containerd.snapshotter.v1''
systemctl stop docker.socket docker.service containerd.service
…
root = "/var/lib/docker/containerd"
…
cd /var/lib
mv containerd/ docker
ln -s docker/containerd containerd
===== Docker Daten in BTRFS verschieben =====
systemctl stop docker.socket docker.service
cd /var/lib/
du -sh docker
df -h .
-> ist genug Platz für ein Backup?
tar -caf docker.tar.zst docker/
shopt -s dotglob
rm -rf docker/*
…
# device during installation: /dev/sdaX
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /var/lib/docker btrfs rw 0 2
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/btrfs btrfs noauto,subvol=/ 0 2
mount -av
tar -xf docker.tar.zst
rm docker.tar.zst
mit containerd:
systemctl stop docker.socket docker.service containerd.service
ohne containerd:
systemctl start docker.socket docker.socket
===== Snapshot erstellen =====
aktuell aktives Docker-Subvolume ermitteln:
mount /mnt/btrfs
cd /mnt/btrfs
btrfs subvolume get-default .
-> Subvolume ID merken: ''ID 472 gen 428819 top level 5 path **20xxxxxx00**''
=== Container stoppen ===
mit containerd:
systemctl stop docker.socket docker.service containerd.service
ohne containerd:
systemctl start docker.socket docker.socket
=== Snapshot erstellen ===
btrfs subvolume snapshot 20xxxxxx00 $(date '+%Y%m%d')01
=== Container starten ===
mit containerd:
systemctl start docker.socket docker.service containerd.service
ohne containerd:
systemctl start docker.socket docker.service
=== Starten überprüfen ===
watch docker ps
====== Docker mit BTRFS statt overlay ======
siehe auch https://docs.docker.com/storage/storagedriver/btrfs-driver/
{
"storage-driver": "btrfs"
}
systemctl start docker.socket
systemctl start docker.service
prüfen:
docker info
-> ''Storage Driver: btrfs''