====== 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 du -sh /var/lib/docker lsblk -> Blockdevice mit genug Platz wählen. mkfs.btrfs /dev/xxx -> UUID merken, kommt später in die ''/etc/fstab'' mount -m /dev/xxx /mnt/btrfs cd /mnt/btrfs btrfs subvolume create $(date '+%Y%m%d')00 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 containerd.service cd /var/lib/ shopt -s dotglob mv docker/* /mnt/btrfs/$(date '+%Y%m%d')00 … # device during installation: /dev/xxx 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 systemctl start 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 merken: ''ID 472 gen 428819 top level 5 path **20xxxxxx00**'' === Container stoppen === systemctl stop docker.socket docker.service containerd.service ++++ ohne containerd: | systemctl stop docker.socket docker.socket ++++ === Snapshot erstellen === btrfs subvolume snapshot 20xxxxxx00 $(date '+%Y%m%d')01 === Container starten === 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''