Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
23
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@mogamin3

Docker ComposeのVolumeにNFSを指定する

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
23
Help us understand the problem. What are the problem?