g00ceyの技術ブログ

Dockeのroot-dataをNFSディレクトリを使用する

目次

mpd

Dockerデーモンで使用するディレクトリをNFSマウントしたディレクトリを使用するに指定したときの話。

操作感どう?

結構重たい。
どう考えてもDockerのさくさくなデプロイは望めないので、dockerホストにディスクがないときだけしか使えない。

環境

  • AspireOne(Docker ホスト)
  • RaspberryPi4
    • HDDが接続されており、nfsホストを提供します

AspireOne

luna@aspire:~$ uname -a
Linux aspire 5.4.0-51-generic #56-Ubuntu SMP Mon Oct 5 14:28:49 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

Raspberry Pi4

pi@pi4-1:~ $ uname -a
Linux pi4-1 5.4.51-v8+ #1333 SMP PREEMPT Mon Aug 10 16:58:35 BST 2020 aarch64 GNU/Linux

構築方法について

NFSホスト構築

$ cat /etc/exports
/mnt/mynfs 192.168.0.0/255.255.255.0(rw,sync,no_subtree_check,no_root_squash)
sudo exportfs -ra

no_root_squashはセキュリティ的にあまりよろしくないといわれていますが、dockerでUID,GIDが指定できることが必須なので、指定します。

NFSマウント

こんな感じでマウント

cat /etc/fstab
192.168.0.12:/mnt/mynfs /mnt/nfs/pi4-1  nfs rw,nosuid,_netdev,noauto,hard,intr 0 0

noautoじゃないほうがいい気もするけど、いったんこれで。

Dockerデーモンでデータを配置する場所を指定

NFSマウントをしたディレクトリをDockerデーモンのデータを配置するように指定。
なお、storage-driverはdevicemapperじゃないといけない。

cat /etc/docker/daemon.json
{
....,
  "data-root": "/mnt/nfs/pi4-1/docker",
  "storage-driver":"devicemapper"
}

Dockerデーモンのデータをコピー

sudo rsync -avz /var/lib/docker/ /mnt/nfs/pi4-1/docker/

Dockerデーモンを再起動

sudo systemctl restart docker

動作確認

luna@aspire:~/src/git/tluna/ympd-build/build$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
luna@aspire:~/src/git/tluna/ympd-build/build$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ympd-build_build    latest              f6f39a26347d        26 minutes ago      408MB
ubuntu              latest              9140108b62dc        3 weeks ago         72.9MB
alpine              latest              a24bb4013296        4 months ago        5.57MB
luna@aspire:~/src/git/tluna/ympd-build/build$

いけてる。


Share

comments powered by Disqus