Skip to content

Instantly share code, notes, and snippets.

@bartprokop
Last active May 28, 2024 12:55
Show Gist options
  • Save bartprokop/15b07ec2502c59cf8020b1541ad57d5c to your computer and use it in GitHub Desktop.
Save bartprokop/15b07ec2502c59cf8020b1541ad57d5c to your computer and use it in GitHub Desktop.
Arch Linux Docker install with BTRFS
# Install Docker first
pacman -S docker
# Create subvolume for Docker images
cd /mnt/t20root
btrfs subvolume create svols/docker
# Create subvolume 'svols/docker'
btrfs subvolume list .
# ID 256 gen 1349 top level 5 path svols/root
# ID 257 gen 1337 top level 5 path svols/home
# ID 263 gen 1350 top level 5 path svols/docker
# Edit /etc/fstab
nano /etc/fstab
# # /dev/sda2 UUID=381dc812-9bde-4a4e-8af1-cd6546ffec6e
# LABEL=t20sda2 /var/lib/docker btrfs rw,noatime,nodiratime,compress=zstd:3,space_cache=v2,subvol=/svols/docker 0 0
reboot
# Check if mount directory exists and if subvolume is mounted
ls -la /mnt/t20root/svols/root/var/lib
# drwxr-xr-x 1 root root 0 May 22 17:32 docker
mount -v
# /dev/sda2 on /var/lib/docker type btrfs (rw,noatime,nodiratime,compress=zstd:3,space_cache=v2,subvolid=263,subvol=/svols/docker)
# Finally start and enable docker - https://wiki.archlinux.org/title/Systemd#Using_units
systemctl start docker
systemctl enable docker
# Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
# Testing it
docker run -it --rm archlinux bash -c "echo hello world"
# Unable to find image 'archlinux:latest' locally
# latest: Pulling from library/archlinux
# 6b2c4032adc9: Pull complete
# e511435eb07f: Pull complete
# Digest: sha256:ebe6578e11149ab4ab294bc0d1c0907d5a1c77a39707802179fdb6519a81d6e2
# Status: Downloaded newer image for archlinux:latest
# hello world
# list subvolumens from /
btrfs subvolume list /
# ID 256 gen 1398 top level 5 path svols/root
# ID 257 gen 1391 top level 5 path svols/home
# ID 263 gen 1388 top level 5 path svols/docker
# ID 264 gen 1385 top level 263 path svols/docker/btrfs/subvolumes/f864609c071e1a5d559a77aec83a1f8d72e95c37475c1f10f36e5a488d3075e8
# ID 265 gen 1386 top level 263 path svols/docker/btrfs/subvolumes/67e302d7c5852f57fb2073b0ab06be5a3909f3137f9c0a1ace8326f37ee6cfb1
# list subvolumens from svols/docker
btrfs subvolume list /mnt/t20root/svols/docker
# ID 256 gen 1398 top level 5 path svols/root
# ID 257 gen 1391 top level 5 path svols/home
# ID 263 gen 1388 top level 5 path svols/docker
# ID 264 gen 1385 top level 263 path btrfs/subvolumes/f864609c071e1a5d559a77aec83a1f8d72e95c37475c1f10f36e5a488d3075e8
# ID 265 gen 1386 top level 263 path btrfs/subvolumes/67e302d7c5852f57fb2073b0ab06be5a3909f3137f9c0a1ace8326f37ee6cfb1
# some more "ambitious" test
docker run -d -p 80:80 docker/getting-started
docker ps
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 7672d0dca7fd docker/getting-started "/docker-entrypoint.…" 7 seconds ago Up 5 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp jovial_lichterman
# Try access server on port 80 to check if container is running properly
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment