3
version: "3"
services:
  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
    container_name: es
    environment:
      - discovery.type=single-node
    ports:
      - 9200:9200
    volumes:
      - esdata1:/usr/share/elasticsearch/data
  web:
    image: prakhar1989/foodtrucks-web
    command: python app.py
    depends_on:
      - es
    ports:
      - 5000:5000
    volumes:
      - ./flask-app:/opt/flask-app
volumes:
    esdata1:
      driver: local

上記のコードはここにあります:チュートリアル

VolumesはContainerが終わってもPersistするデータの事だと思いますが、既にここ:

volumes:
          - esdata1:/usr/share/elasticsearch/data

とここ:

volumes:
          - ./flask-app:/opt/flask-app

で各Container内にMount pointを指定していると思います。
なので最後の部分が何を指定しているのかが分かりません:

volumes:
        esdata1:
          driver: local
mLstudent33
  • 185
  • 8

1 Answers1

3

最後の部分ではPersistent volume(esdata1)の設定をしています。
ローカルのディレクトリをマウントする(flask-appディレクトリ)ならばこれはいりませんが、Persistent volumeを使う場合はこのように別途利用するVolumeを宣言する必要があります。

StackDestroyer
  • 3,607
  • 7
  • 56
  • 105
  • こちらも見ましたが:https://stackoverflow.com/questions/39175194/docker-compose-persistent-data-mysql – mLstudent33 Sep 24 '18 at 08:57
  • 最後のPersistent VolumeはHost Machineにセーブされて、esweb各自のvolumesはコンテナ内にマウントされる事ですか。 – mLstudent33 Sep 24 '18 at 09:06
  • 1
    その理解で良いと思います。コメントの回答にもあるようにPersistent Volumeを利用するとDockerによって定められたディレクトリ(/var/lib/docker/volumes)以下にディレクトリが作られ、そのディレクトリをコンテナでマウントできるようになります。このボリュームはコンテナ内で実行されるプロセス(例えばElasticSearchやMySQL)で永続化したいデータの保存場所などに利用されます。一方flask-appのほうは開発者が作成したapp.pyがあるディレクトリをコンテナにマウントします。こうすることによってローカルマシンでapp.pyを編集するとコンテナ内のプログラムも書き換えることができます。 – StackDestroyer Sep 24 '18 at 09:18
  • 1
    ちなみに作成したPersistent Volumeはdocker volume lsで確認できます – StackDestroyer Sep 24 '18 at 09:20