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 #
- http://kroah.com/log/blog/2018/08/24/what-stable-kernel-should-i-use/
- https://bugs.archlinux.org/task/36969
- https://docs.docker.com/engine/security/rootless/
- https://docs.docker.com/storage/storagedriver/
- https://haydenjames.io/quick-tips-stable-arch-linux-experience/
- https://issueexplorer.com/issue/rootless-containers/rootlesskit/269
- https://vadosware.io/post/back-to-docker-after-issues-with-podman/
- https://wiki.archlinux.org/title/Docker#Docker_rootless