docker-compose 上でオブジェクトの保存先を NFS サーバ上のディレクトリとした MinIO を構築します。
前提
- NAS:
- OS: Arch Linux
- IP: 192.168.11.1
- Docker Host PC:
- OS: Ubuntu
- IP: 192.168.11.2
- docker, docker-compose をインストール済み
MinIO とは?
MinIO は aws S3 互換のオブジェクトストレージです。
調べてもらうといろいろな記事で紹介されていると思います。
今回はこの MinIO を docker-compose を用いて docker で構築しつつ,MinIO のコンテナに NFS をマウントしてオブジェクト自体は NAS に保存されるようにします。
NAS 側準備
今回,NAS には事前に NFS サーバのセットアップを済ませてあります。
詳細は Arch Linux を NAS 用にセットアップ - YetAnother_yk's tech blog を確認いただければ幸いです。
まずは,MinIO のオブジェクトの保存先ディレクトリ,NFS 共有のためのマウント先ディレクトリを作成します:
$ mkdir /Volume1/MinIO
$ sudo mkdir -p /srv/nfs4/MinIO
次に /etc/fstab
に次の内容を追記します(ZFS の場合):
+ /Volume1/MinIO /srv/nfs4/MinIO none bind,defaults,nofail,x-systemd.requires=zfs-mount.service 0 0
続いて NFS の設定します:
+ /srv/nfs4/MinIO 192.168.11.2/24(rw,no_root_squash)
$ sudo mount -a # マウントする
$ sudo exportfs -arv # NFS 設定を反映する
ホストマシン側準備
続いて,Docker のホストマシン側の設定を行います。
NFS サーバとの通信には Tinc を使用しています。
導入方法などはこちらを確認してください →お手軽に VPN 経由のノード間通信を実現する Tinc を使ってみる - Qiita
実際に使用した docker-compose.yml
は下のものです:
version: '3.7'
services:
minio:
image: minio/minio
restart: unless-stopped
volumes:
- ./config:/root/.minio
- minio:/data
ports:
- "9000:9000"
command: server /data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 60s
timeout: 20s
retries: 3
volumes:
minio:
driver_opts:
type: nfs
o: "addr=192.168.11.1,hard,rw,nfsvers=4"
device: ":/srv/nfs4/MinIO"
この YAML ファイルは MinIO | Deploy MinIO on Docker Compose をベースにしています。
NFS をマウントするメインの記述は以下の部分です:
volumes:
minio:
driver_opts:
type: nfs
o: "addr=192.168.11.1,hard,rw,nfsvers=4"
device: ":/srv/nfs4/MinIO"
o
は NFS のマウント時のオプションと同様になっています。