nfs4のサーバー機能をコンテナで実現する方法

1.概要

Dockerを利用してnfs4のサーバー機能をコンテナで実現する方法を調べました。参考資料を参照してdocker-composeで起動できて、クライアントからファイルのread/writeができるようにしました。クライアントはDockerを可動させているubuntu-20.04 Desktopです。/home/usernameにディレクトリを作成し、これをnfs4のコンテナから共有設定します。この内容を記述します。

2.詳細

(1) nfs4サーバー環境構築

(a) ubuntu-20.04にdocker, docker-composeを導入
$ sudo apt -y install docker.io
$ sudo apt -y install docker-compose
$ sudo usermod -aG docker $(whoami)
$ docker --version
$ docker-compose --version
PCを1度再起動します

(b) uid=1000, gid=1000のusernameに/home/username/nfsディレクトリを作成
$ mkdir /home/username/nfs

(c) Dockerfile、docker-compose.yml作成して、コンテナ起動
Dockerfile作成

FROM itsthenetwork/nfs-server-alpine
RUN mkdir /nfsshare
RUN chown 1000.1000 /nfsshare

docker-compose.yml作成

version: '3'
services:
  nfs:
    build:
        context: .
    privileged: true
    volumes:
        - /home/username/nfs:/nfsshare
    environment:
        - "SHARED_DIRECTORY=/nfsshare"
    ports:
        - "2049:2049"

コンテナ起動

$ docker-compose up -d

(d) nfsクライアント導入、nfs mount
$ sudo apt install nfs-client

コンテナのIPを調べます。
$ docker ps
$ docker exec -it ContainerID /bin/bash
ip -a
exit

ip=172.18.0.2に設定されていたとします。

$ sudo mount.nfs4 -v 172.18.0.2:/ /mnt

(e) 試験
$ touch /mnt/file-a
$ ls /home/username/nfs にfile-aが存在することを確認します

(2) nfs4サーバーへDockerコンテナからアクセスする方法

Dockerを利用してnfs4のサーバー機能をコンテナで実現する方法を調べました。今回は別PCで動作しているnfs4サーバーへDockerコンテナからアクセスする方法を試したので記述します。nfs-clientを導入すると思っていたのですが、volumes定義をすることでアクセスできました。記述方法が良くわからず苦労しました。

作成した手順は以下の通りです。

(a) ubuntu-20.04にdocker, docker-composeを導入
$ sudo apt -y install docker.io
$ sudo apt -y install docker-compose
$ sudo usermod -aG docker $(whoami)
$ docker --version
$ docker-compose --version
PCを1度再起動します

(b) docker-compose.yml作成して、コンテナ起動
nfs4サーバーは、192.168.0.1で動作しているとします。

docker-compose.yml作成

version: '3'
services:
  ubuntu20:
    image: ubuntu:20.04
    volumes:
        - vol_nfs:/mnt
    tty: true
volumes:
    vol_nfs:
        driver: local
        driver_opts:
            type: nfs
            o: "addr=192.168.0.1,hard,nfsvers=4"
            device: ":/"

コンテナ起動

$ docker-compose up -d

(c) 試験
$ docker ps
でubuntu:20.04のコンテナIDを調べて、コンテナにログインします。
$ docker exec -it ContainerID /bin/bash

# ls /mnt

前回作成したfile-aが参照できます。

(3) 1台のPCでDockerを使用してNFS環境を構築

作成した手順は以下の通りです。

(a) ubuntu-20.04にdocker, docker-composeを導入
$ sudo apt -y install docker.io
$ sudo apt -y install docker-compose
$ sudo usermod -aG docker $(whoami)
$ docker --version
$ docker-compose --version
PCを1度再起動します

(b) docker-compose.yml作成して、コンテナ起動
docker-compose.yml作成

version: '3'
services:
  ubuntu20:
    image: ubuntu:20.04
    volumes:
        - vol_ubuntu:/mnt
    tty: true
  nfs:
    image: itsthenetwork/nfs-server-alpine
    privileged: true
    volumes:
        - vol_nfs:/nfsshare
    environment:
        - "SHARED_DIRECTORY=/nfsshare"
    ports:
        - "2049:2049"

volumes:
    vol_nfs:
    vol_ubuntu:
        driver: local
        driver_opts:
            type: nfs
            o: "addr=localhost,hard,nfsvers=4"
            device: ":/"
   
コンテナ起動

$ docker-compose up -d

(c) 試験
$ docker ps
でubuntu:20.04のコンテナIDを調べて、コンテナにログインします。
$ docker exec -it ContainerID /bin/bash

# df -h

:/ が /mnt にマウントされます。

3.所見

NFSサーバとNFSクライアント環境を構築して、単体PCで動作確認をしました。ネットワークを経由した接続確認を実施して理解を深める予定です。

参考

[外部サイト参照]
docker で nfs サーバを構築してみた
itsthenetwork/nfs-server-alpine

コメント

過去30日間に良く読まれた記事

miniPCのBMAXでWindows11のsecure boot設定漏れでトラブル発生

LinuxMint/ubuntuにWine 11導入を試しました ( LinuxMint 21.3 / 22.3 ubuntu 22.04 / 26.04 Wine 11.0 / 11.6 / 11.8 / 11.13 )

Windows95/98のPCゲームをUbuntu/LinuxMintの最新PCで楽しむ方法 ( KVM / Wine / dosbox-x / midi )