Dockeのroot-dataをNFSディレクトリを使用する
目次
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$
いけてる。