Setup NFS Server With Docker

Penerapan NFS Server banyak digunakan untuk backup data sehingga diperlukan server fisik dengan jumlah slot disk yang cukup banyak (NAS). Namun ada juga yang menggunakan NFS untuk keperluan selain backup seperti untuk penyimpanan file website yang dihubungkan dengan webserver agar memberikan ketersediaan tinggi (High availability).

Panduan kali ini adalah cara cepat setup NFS server di Docker dan untuk selanjutnya dapat Anda sesuaikan dengan topologi atau kebutuhan yang diperlukan.

Create directory

mkdir -p /data/storage

direktori ini akan digunakan sebagai volume untuk SHARED_DIRECTORY.

Create container

docker run -dit --privileged --restart unless-stopped \
-e SHARED_DIRECTORY=/data -v /data/storage:/data \
-p 2049:2049 dockerinusa/nfs-server-alpine

Pastikan container status running

docker ps

Mount volume

Selanjutnya install NFS Client agar dapat mount volume di NFS server

sudo apt install nfs-client -y

Lalu mount dengan perintah

sudo mount -v -t nfs4 ip-nfs-server:/ /mnt

Cek mounting dengan df

df -hT
Filesystem     Type   Size  Used Avail Use% Mounted on
tmpfs          tmpfs   97M  1.1M   96M   2% /run
/dev/vda1      ext4   7.6G  2.6G  5.1G  34% /
tmpfs          tmpfs  484M     0  484M   0% /dev/shm
tmpfs          tmpfs  5.0M     0  5.0M   0% /run/lock
/dev/vda15     vfat   105M  6.1M   99M   6% /boot/efi
tmpfs          tmpfs   97M  4.0K   97M   1% /run/user/1000
192.168.5.1:/  nfs4   156G   28G  120G  19% /mnt

Multiple Shares

docker run -d --name nfs --privileged \
-p 2049:2049 \
-v /some/where/fileshare:/nfsshare \
-v /some/where/else:/nfsshare/another \
-e SHARED_DIRECTORY=/nfsshare \
-e SHARED_DIRECTORY_2=/nfsshare/another \
dockerinusa/nfs-server-alpine

Lalu coba mount pada sisi client

sudo mount -v ip-nfs-server:/ /mnt/one
sudo mount -v ip-nfs-server:/another /mnt/two

Jika ingin menambahkan lebih dari 2 volume. Edit /usr/bin/nfsd.sh dengan menambahkan konfig

if [ ! -z "${SHARED_DIRECTORY_2}" ]; then
  echo "Writing SHARED_DIRECTORY_2 to /etc/exports file"
  echo "{{SHARED_DIRECTORY_2}} {{PERMITTED}}({{READ_ONLY}},{{SYNC}},no_subtree_check,no_auth_nlm,insecure,no_root_squash)" >> /etc/exports
  /bin/sed -i "s@{{SHARED_DIRECTORY_2}}@${SHARED_DIRECTORY_2}@g" /etc/exports
fi

Ubah SHARED_DIRECTORY_2 menjadi SHARED_DIRECTORY_3 dan seterusnya