LoginSignup
22
26

More than 5 years have passed since last update.

Docker ComposeのVolumeにNFSを指定する

Posted at

最近教えてもらった技なのですが、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してあげることで、自動的にマウントされてそちらを使ってくれます。

22
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
26