🐳

ZFSを有効化したLinuxでdockerデーモンを起動するとzpool/ROOT 下に作られてしまうのを防ぐ

2021/09/24に公開

ZFSを有効化したLinuxで、dockerデーモンを起動すると、自動でZFSを使って起動するようになる。しかし、レイヤー1つずつにfilesystemとして登録され、しかも zpool/ROOT/var/lib/xxx に作られてしまい、zpool/ROOT でスナップショットをとると、dockerの各レイヤーにまでスナップショットが取られてしまい、辛い感じになる。

これを回避するには、zpool/ROOT とは異なる zpool/DOCKER を作成し、それを使ってdockerデーモンが動くようにすれば良い。

以下のコマンドで、filesystemを作る。

sudo zfs create zpool/DOCKER

そして、dockerデーモンの設定を /etc/docker/daemon.json に置く。

{
  "storage-driver": "zfs",
  "storage-opts": ["zfs.fsname=zpool/DOCKER"]
}

dockerデーモンを再起動する。この時、既存のdockerディレクトリを消去しておく。

sudo systemctl stop docker
sudo rm -rf /var/lib/docker
sudo systemctl start docker

試しにimageをpullしてみると、zpool/DOCKERに増えていることが確認できる。

docker pull debian
sudo zfs list

NAME                                                                                        USED  AVAIL     REFER  MOUNTPOINT
zpool                                                                                      97.5G   817G       96K  /
zpool/DOCKER                                                                               91.8M   817G       96K  /DOCKER
zpool/DOCKER/ea9d345a8ab2cc40480ab9120607a8c831a45845b284daf0e59f9315767628de              91.7M   817G     91.7M  legacy
zpool/ROOT                                                                                 25.9G   817G       96K  none

Discussion