2019年7月26日金曜日

docker で nfs サーバを構築してみた

概要

nfs サーバを docker の nfs ボリュームとして使う方法はいろいろと紹介記事がありますが docker 上で nfs サーバ自体を動作させる記事が中々なかったので紹介します

環境

  • Ubuntu 16.04 (Vagrant)
  • docker 18.09.8

nfs サーバの構築

Dockerhub でいろいろと公開されているイメージがありますが今回は nfs-server-alpine を使ってみました
まずは nfs で共有するディレクトリを作成します
今回は vagrant ユーザで作成するのでサーバ側とクライアント側のマウントポイントは両方とも vagrant ユーザを所有者にする必要があります

  • sudo /nfsshare
  • sudo chown vagrant:vagrant /nfsshare

あとはそのディレクトリをマウントする nfs コンテナを起動するだけです

  • docker run -d -p 2049:2049 --name nfs --privileged -v /nfsshare:/nfsshare -e SHARED_DIRECTORY=/nfsshare itsthenetwork/nfs-server-alpine:latest

これで OK です
2049 を publish することで外部からも接続できるようになります

マウントできるか確認

確認も Ubuntu から行います
nfs-client が必要なのでインストールします

  • sudo apt -y install nfs-client

あとはマウントポイントの作成をしてマウントするだけです

  • sudo mkdir /mnt
  • sudo chown vagrant:vagrant /mnt
  • sudo mount.nfs4 -v 172.28.128.4:/ /mnt/

nfs サーバ側のマウントポイントは / になるのでご注意ください

mount.nfs4: timeout set for Wed Jul 24 10:17:36 2019 mount.nfs4: trying text-based options 'addr=172.28.128.4,clientaddr=172.28.128.4'

マウントが完了したらファイルが配置できるか確認します

  • touch /mnt/hoge

アンマウントする場合は umount コマンドを使います

  • sudo umount /mnt

Tips: docker for mac の場合は File Sharing を有効にする

  • sudo mkdir /nfsshare/
  • sudo chown -R hawksnowlog:staff /nfsshare/

Preferences -> File sharing からマウントするパスを追加する必要があります
今回は /nfsshare というパスを追加しました

Tips: macOS Mojave でマウントする場合

Mojave から nfs をマウントする場合は少しコマンドが特殊です

  • sudo mkdir /Volumes/mnt
  • sudo mount_nfs -v -o vers=4 172.28.128.4:/ /Volumes/mnt/

デフォルトだと v3 になっているようなので -o でバージョンを指定しましょう
マウントコマンドは mount_nfs になります
また上記でマウントすると所有者が Ubuntu 上の vagrant:vagrant になっているので macOS 側に存在しているユーザ ID とグループ ID に変更してあげましょう

最後に

nfs サーバを docker コンテナとして起動してみました
今回マウントした /nfsshare の容量を増やせば nfs サーバの容量も増やせます
他のコンテナからマウントする場合は root 権限でも問題ないかもしれませんが基本的にはどのユーザがマウントするのかは意識したほうが良いと思います

参考サイト

*https://hub.docker.com/r/itsthenetwork/nfs-server-alpine

0 件のコメント:

コメントを投稿