systemd-nspawn Advent Calendar 2017 3日目の記事です。
systemd-nspawnはデフォルトでbtrfsと連携するようになっています。
btrfsと連携することでより便利になります
準備
apt install btrfs-progs
mkfs.btrfs /dev/vda
echo '/dev/vda /var/lib/machines btrfs defaults 0 0' >> /etc/fstab
mount /var/lib/machines
こうなればOKです
df -hT /var/lib/machines
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
/dev/vda btrfs 20G 17M 18G 1% /var/lib/machines
使ってみる
適当にコンテナをインポートしてみます
docker export $(docker create fedora:27 echo ok) > /tmp/fedora27.tar
machinectl import-tar /tmp/fedora27.tar
ちなみにmachinectlコマンドを使わない場合は自分でsubvolumeを作ればOKです
cd /var/lib/machines/
btrfs subvolume create ubuntu
debootstrap --arch amd64 xenial ./ubuntu/ http://archive.ubuntu.com/ubuntu
するとこんな感じにbtrfsのsubvolumeが出来ているのがわかります。
(1コンテナ1サブボリュームになります)
btrfs subvolume list -p /var/lib/machines
ID 259 gen 62 parent 5 top level 5 path fedora27
cd /var/lib/machines
# 複製も一瞬ですし
machinectl clone fedora27 fedora28
# --ephemeralオプションを付けるとコンテナ終了時に自動的に破棄されるコンテナが作れる
systemd-nspawn -D fedora27/ --ephemeral
# fedora27をテンプレートとし新たなhogeコンテナを作る(コンテナが終了しても消えない)
systemd-nspawn --template=fedora27 -D hoge
--ephemeralオプションはDockerのイメージと動いてるコンテナを明確に分けるDockerみたいな使い方する人には良いかもしれません
この辺のオプションはbtrfsの機能で実現していて、単純コピーではないので高速ですし、Disk容量も節約できます。
便利ですね