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
コメント
コメントを投稿