最近教えてもらった技なのですが、Docker ComposeのVolumesにはNFSストレージをマウントすることができるようです。
やってみたので、忘れないようにメモ。ちなみに、今回はGrowiというOSSのWikiを動かす例です。
Docker Composeのバージョンは以下。
$ docker-compose -v
docker-compose version 1.21.2, build a13347
Growiは公式でdocker-compose.yml
を公開しているので、まずはそちらをもらって来ました。
weseek/growi-docker-compose: growi-docker-compose - The fastest way to boot GROWI
こちらにあります。
version: '3'
services:
app:
build:
context: .
dockerfile: ./Dockerfile
ports:
- 127.0.0.1:3000:3000 # localhost only by default
links:
- mongo:mongo
- elasticsearch:elasticsearch
depends_on:
- mongo
- elasticsearch
environment:
- MONGO_URI=mongodb://mongo:27017/growi
- ELASTICSEARCH_URI=http://elasticsearch:9200/growi
- PASSWORD_SEED=changeme
# - FILE_UPLOAD=local # activate this line if you use local storage of server rather than AWS
# - MATHJAX=1 # activate this line if you want to use MathJax
# - PLANTUML_URI=http:// # activate this line and specify if you use your own PlantUML server rather than public plantuml.com
command: "dockerize
-wait tcp://mongo:27017
-wait tcp://elasticsearch:9200
-timeout 60s
npm run server:prod"
volumes:
- growi_data:/data
mongo:
image: mongo:3.4
volumes:
- mongo_configdb:/data/configdb
- mongo_db:/data/db
elasticsearch:
image: elasticsearch:5.3-alpine
environment:
- "ES_JAVA_OPTS=-Xms256m -Xmx256m" # increase amount if you have enough memory
command:
- sh
- -c
- "./bin/elasticsearch-plugin list | grep -q analysis-kuromoji || ./bin/elasticsearch-plugin install analysis-kuromoji;
./bin/elasticsearch-plugin list | grep -q analysis-icu || ./bin/elasticsearch-plugin install analysis-icu;
/docker-entrypoint.sh elasticsearch"
volumes:
- es_data:/usr/share/elasticsearch/data
- es_plugins:/usr/share/elasticsearch/plugins
- ./esconfig:/usr/share/elasticsearch/config
volumes:
growi_data:
mongo_configdb:
mongo_db:
es_data:
es_plugins:
だいぶ長いですが、こんな感じになっています。
現状、volumes
には特に値が設定されていないので、ホストの/var/lib/docker/volumes
以下に保存されます。
これを以下のようにすることで、保存先をNFSストレージに変更することができます。
volumes:
growi_data:
driver_opts:
type: nfs
o: "addr=192.168.1.2,hard,rsize=1048576,wsize=1048576,nfsvers=4"
device: ":/volume1/wiki-data/growi_data"
mongo_configdb:
driver_opts:
type: nfs
o: "addr=192.168.1.2,hard,rsize=1048576,wsize=1048576,nfsvers=4"
device: ":/volume1/wiki-data/mongo_configdb"
mongo_db:
driver_opts:
type: nfs
o: "addr=192.168.1.2,hard,rsize=1048576,wsize=1048576,nfsvers=4"
device: ":/volume1/wiki-data/mongo_db"
es_data:
driver_opts:
type: nfs
o: "addr=192.168.1.2,hard,rsize=1048576,wsize=1048576,nfsvers=4"
device: ":/volume1/wiki-data/es_data"
es_plugins:
driver_opts:
type: nfs
o: "addr=192.168.1.2,hard,rsize=1048576,wsize=1048576,nfsvers=4"
device: ":/volume1/wiki-data/es_plugins"
このような感じ。o
にはNFSマウントするときのオプションを渡すことができます。
あとは通常通りdocker-compose up
してあげることで、自動的にマウントされてそちらを使ってくれます。