【Docker】RancherOSで本格的な自宅サーバーを構築しよう(4) ~ GlusterFSを使ってデータを共有＋永続化しよう ~

#GlusterFSを使ってデータを永続化しよう
### コンテナ間でデータを共有・永続化することができる

![rancher-docker.png](https://qiita-image-store.s3.amazonaws.com/0/62822/58fe1d1a-aaff-059e-b85b-a95f8b490d08.png)

## 関連記事
+ [RancherOSで本格的な自宅サーバーを構築しよう](http://qiita.com/okasho1010/items/da52b4dc12221feca55c)
+ [RancherOSでrancher-serverをインストールしよう](http://qiita.com/okasho1010/items/305e0af4545901d44a94) 

+ [RancherOSでrancher-agentを構築しよう](http://qiita.com/okasho1010/items/500c3705d2f4610cebe0)

+ **[RancherOSでGlusterFSを使ってデータを永続化しよう](http://qiita.com/okasho1010/items/2620da1b2e93437e8a74)←　今ここ**

+ [RancherOSでprivate registory でdocker imageを管理しよう](http://qiita.com/okasho1010/items/cf0a9569638d00a9e451)


+ [RancherのCATALOGのライブラリー一覧](http://qiita.com/okasho1010/items/f6875d5bce2ac6752758) 



##使うライブラリ([CATALOG一覧](http://qiita.com/okasho1010/items/f6875d5bce2ac6752758#consul-registrator))
### glusterFS
![community-glusterfs.svg.png](https://qiita-image-store.s3.amazonaws.com/0/62822/b1d65c49-0873-6134-b4ca-89010318308e.png)

+ GlusterFSは複数のストレージノードのファイルシステムを論理的に統合しボリュームを作成します

### convoy-gluster
![library-convoy-nfs.svg.png](https://qiita-image-store.s3.amazonaws.com/0/62822/405071ff-f83d-c902-7a0a-c18a10bd75b2.png)

+ GlusterFSというファイル分散システムを利用して、コンテナの共有volumeを作ることができる
+ これを使ってコンテナ間のデータのやり取りや共有、永続化、スナップショット保存、復元を行う

##glusterfsのインストール
+ CATALOGから「Gluster FS」を選択
+ volume Nameを設定

	```
	適当に"my_vol"
	```
+ gluster networking modeを設定

	```
	rancherのネットワーク上でGlusterを使用するには、デフォルトの設定のままでOK。
	Glusterを公開したい場合は、hostを選択していいが、Glusterがホストにアクセスできるものにアクセスできるようになることに、注意してください。信頼されていない設定にこの設定を使用しないでください。
	```
+ Done(どーん)

<img width="1680" alt="Screen Shot 2016-06-07 at 17.17.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/62822/c0ce3f4b-5ca2-4548-9f74-c71788a0b13a.png">


##convoy-glusterのインストール
+ CATALOGから「Convoy GlusterFS」を選択
+ GlusterFS Volumeは先ほどの"my_vol"
+ GlusterFS serviceを選択
+ done(どーん)

<img width="1680" alt="Screen Shot 2016-06-07 at 17.18.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/62822/159621ea-6646-a292-5780-cc8edda30e6e.png">


##volume_driverの名前を確認しとく
+ INFRASTRUCTURE -> STORAGE POOLS
+ ○Active 「convoy-gluster」<- これ

<img width="1680" alt="Screen Shot 2016-06-07 at 17.04.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/62822/3e711585-42dc-a04a-dc63-6781d99f6474.png">


##サンプルサービスで確認

+ APPLICATIONS -> add stack
+ docker-compose.yml

	```
	test:
	  tty: true
	  image: ubuntu:14.04.3
	  stdin_open: true
	  volumes:
	  - test_volume: testvolume
	  volume_driver: convoy-gluster
	```
+ Done(どーん)


<img width="1680" alt="Screen Shot 2016-06-07 at 17.20.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/62822/ea1c77c3-c72e-88be-a51e-1804bfdcabab.png">


+ コンテナを「scale＋」で2個以上に増やしてみる

<img width="1680" alt="Screen Shot 2016-06-07 at 17.15.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/62822/921d9bba-ac0a-61a6-6036-4ae6d48535e1.png">


+ INFRASTRUCTURE -> STORAGE POOLSで「test_volume」を確認

+ Execute Shellからコンテナに侵入
<img width="1680" alt="Screen Shot 2016-06-07 at 17.13.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/62822/a6faa216-5762-0a7e-951d-69499da526aa.png">

	```
	$ cd testvolume
	$ vi test.yml
	$ ls
	test.yml
	```

+ 別のコンテナでExecute Shell

	```
	$ cd testvolume
	$ ls
	test.yml
	```


##wordpressのMySQLのデータを永続化させてみる

```docker-compose.yml
wordpress:
  image: wordpress
  links:
    - db:mysql

db:
  image: mysql
  environment:
    MYSQL_ROOT_PASSWORD: example
  volumes:
    - wp_data:/var/lib/mysql
    - mysql_conf:/etc/mysql/conf.d
  volume_driver: convoy-gluster
```
これでコンテナが再起動しても、agentが再起動してもデータは消えなくなった！！

##今後コンテナを作る時
+ volume_driver に　convoy-gluster　を指定してvolumesを書くとデータが共有される。

##convoyでスナップショットをとって復元できるようにする
+ 現在対応中らしくてまだできないらしい
+ やりたいこと
    + 定期的にスナップショットをとってS3とかに貯めておく
    + サーバーのfileシステム自体がダウンした時などOSの再インストールのときとかは、ここから復元できるようにする
    + 更新を確認次第、手順を書く予定です