📦

ZFS on linuxでdockerを使う

2021/10/08に公開

環境

  • ArchLinux
  • ZFS root

まえがき

dockerを普通にインストールして、起動すると overlayfs がエラーを出してデーモンが起動しない。

overlayfs: upper fs does not support RENAME_WHITEOUT.
overlayfs: upper fs missing required features.

修正方法

/etc/docker/daemon.json に以下を記述する。

/etc/docker/daemon.json
{
    "storage-driver": "zfs",
}

これで systemctl restart docker すれば起動するようになる。
…が。これだけだと、 zfs list したときに

zroot                                                                                271G   179G     32.2G  /zroot
zroot/01760219725a63b485556ab9885ee97e1b87827da95d682293371c1f2d179645               501K   179G     74.0M  legacy
zroot/037bb15aa1e016188c42f0d6cd9657d56bbb0438369d7b6f285e1441cbe6b0e7                76K   179G      914M  legacy
zroot/04462e6d8f2062374364a8716326e01a1c88d5bdc3b7915da73f7a7e82299d67               367M   179G      502M  legacy
zroot/187c22b305f7954a9ac62daa046717ba9c6f623debcc5dbbf9315421957f5078              8.58M   179G      923M  legacy
zroot/3fe24dc8ad126ac3e27061ff66d57a0c2280c4eebe5d4acd48a884be45994629              43.6M   179G      966M  legacy
zroot/47444a9fbb311dd6dffd0354c797ab157d9b22f517fb1f79024f46c38bb261ce              10.3M   179G     83.3M  legacy
zroot/4e2c9621b69fdf9ae7af7a49520dfbbcc7e9fcae2fbf2df82c43d33f4e5b87e9                45K   179G     85.7M  legacy
zroot/4f4354531f31a28618b2309219e17c21c304bebed17232eb8ccc3989b0281e4d               158M   179G      321M  legacy
zroot/50a7b5d1c974be396de8afe91b7d379919229dbd079986ba61aa54be319c6a9f                67K   179G      966M  legacy
zroot/5abf3459d5f578114a6eaea508d7d8c56d86edf3d7ca8ce8495d535aad23b7d4              63.5K   179G      137M  legacy
zroot/6392643e8c58e4b89ac899ae96bc28dcf817a5e0f54ca478f32bd2f09fab04e8              22.0M   179G      165M  legacy
zroot/6cfb82787e34bad9b15b4faa18346065928f6146bdd557d2a336fcf7b62b42d3                52K   179G      502M  legacy

このような感じになってしまってイマイチ嬉しくない。これは、/var/lib/docker を独立したzvolに作成することで少し良くなる。

# rm -rf /var/lib/docker
# mkdir -p /var/lib/docker
# systemctl stop docker
# zfs create -o mountpoint=/var/lib/docker zroot/docker
# systemctl start docker

※ これを実行する前に /var/lib/docker を空にしておくとゴミが残らなくて良い

実行後

zroot/docker                                                                         511M   180G      963K  /var/lib/docker
zroot/docker/1e4fb5f1b1b030101aec07118d73d73589e1e2348434a7df28eff3efab3e9963       62.5K   180G      137M  legacy
zroot/docker/4bb7f02c4fcb8b2f3c7739147f94f4c6cedc94b45ee61e1a59985cef05647fac         74K   180G      502M  legacy
zroot/docker/51c460dd69b9cd9abe17c7179167bb21604e0d69cc7b2bfb10bf5395aeb94680        367M   180G      502M  legacy
zroot/docker/612f66a077f07d5e5ded79454deaad77204e390ef923c6ba67ddc26ea80e4c98       4.28M   180G     85.7M  legacy
zroot/docker/658be2eba3faec489b7f8f5d6818b17db14c9d13c7b9ee6b06f228c2d8630c6d        240K   180G      502M  legacy
zroot/docker/658be2eba3faec489b7f8f5d6818b17db14c9d13c7b9ee6b06f228c2d8630c6d-init    75K   180G      502M  legacy

こうしておけば、dockerがどれだけのdisk容量を使っているかもわかりやすくなります。
…ごちゃごちゃ出てきちゃうのは変わらないですが。

Discussion