V súčasnosti možno používanie rootless Docker na Arch rozumne rozdeliť do dvoch prístupov: stabilita a výkon. Pre stabilitu je voľbou LTS jadro a storage driver fuse-overlayfs, zatiaľ čo pre výkon sa používa najnovšie stabilné jadro spolu s najnovším široko adoptovaným storage driverom overlay2. Pozrime sa, ako nastaviť obe možnosti.

Stabilita s LTS jadrom a FUSE #

Niektoré distribúcie, menovite Contabo, ponúkajú celkom pekný Arch image pre VPS. Dodáva sa s linux-lts, čo je rozumná voľba pre serverové nasadenie. V čase písania bola najnovšia verzia LTS jadra 5.10, pričom podpora pre overlay2 prišla až v 5.11 — čo znamená žiadnu podporu pre tento storage driver s oficiálnym LTS jadrom. To nás privádza k časom osvedčenejšiemu, no možno menej výkonnému fuse-overlayfs storage driveru.

yay -S fuse-overlayfs docker-rootless-extras-bin

Vyššie uvedené tiahne aj rootlesskit alebo rootlesskit-bin do tvojho systému. Teraz už len stačí postupovať podľa Arch wiki, skrátene:

echo "$USER:165536:65536" | sudo tee /etc/subgid /etc/subgid
systemctl --user enable --now docker.socket
echo "export DOCKER_HOST=unix://\$XDG_RUNTIME_DIR/docker.sock" >> .profile

Potvrď pomocou docker info a hľadaj Storage driver.

Výkon so stabilným jadrom a overlay2 #

Toto je variácia vyššie uvedeného. Najprv musíme prepnúť na najnovšie stabilné jadro linux, v čase písania vetva 5.15, napríklad takto:

sudo pacman -S linux
sudo pacman -Rnc linux-lts
sudo mkinitcpio -p linux
sudo grub-mkconfig -o /boot/grub/grub.cfg

Pre zvyšok postupuj podľa vyššie uvedeného, iba vynechaj inštaláciu fuse-overlayfs. Všimni si, že jeho inštalácia neuškodí, keďže pri danom stabilnom jadre si Docker rootless automaticky vyberie overlay2.

Prepísanie voľby #

Docker vyberie najlepší dostupný driver, ale voľbu možno prepísať úpravou ~/.config/docker/daemon.json nasledovne:

{
  "storage-driver": "overlay2"
}

Vyššie uvedené vyžaduje minimálne jadro 5.11 pre funkčný rootless Docker, ako bolo už uvedené. Alebo alternatívne, so stabilným jadrom a prítomným balíčkom fuse-overlayfs, možno vynútiť FUSE storage driver pomocou:

{
  "storage-driver": "fuse-overlayfs"
}

Teraz znovu spusti služby:

systemctl --user stop docker.service
systemctl --user stop docker.socket
systemctl --user enable docker.socket --now
docker info

Poznámka: Hoci návody radšej spomínajú socket pre Docker Rootless, zvážte povolenie docker.service namiesto docker.socket pre kritické služby, ktoré by mali bežať neustále.

Na mojom zariadení to však viedlo k chybe podobnej tejtohttps://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file:

Error starting daemon: error initializing graphdriver: "/home/peterbabic/.local/share/docker" contains other graph drivers:
fuse-overlayfs; Please cleanup or explicitly choose storage driver (-s <DRIVER>)

Chybu možno nájsť v žurnáli pod nasledujúcim:

journalctl --user -xeu docker.service

Upozornenie: nasledujúci krok môže viesť k strate dát! Postupuj opatrne a s riadnymi zálohami.

Ak práve nastavuješ veci, najbezpečnejší spôsob je odstrániť všetky dáta Docker rootless:

rm -rf ~/.local/share/docker

Teraz znovu spusti službu, opísanú v predchádzajúcom kroku. Vybraný driver by sa mal použiť.

Odkazy #