今回はdockerコンテナで動くmysqlデータをホストOS上にセーブすることで、

commitしなくてもデータを維持する!ということをしてみます。

 

今まではコンテナ落とす度にちゃんとcommitしないと、次に起動するときにデータが無くなり

Immutable Infrastructureとは程遠い感じになっていたので

サーバーは機能だけを提供して、データは別にするという疎結合な感じにするっていうのがモチベーション。

 

本日の参考サイトはこちら↓

http://www.zabbix.jp/documents/installation/install-rpm

http://cpw.hatenadiary.jp/entry/2013/08/20/220306

 

考え方としては、ホストOSにmysqlデータを格納してそれをコンテナがマウントして使うって感じ。

docker+zabbixの回で既にmysql-serverがインストールされているので、そのデータ移行もやってみます。

 

1. ホストOSに任意のディレクトリを作成。

コンテナにマウントさせる共有ディレクトリを作成します。

前者はダンプファイル共有用、後者はmysqlデータ格納用になります。

 

2. docker run でコンテナ作成。

1で作成した共有ディレクトリの内、ダンプファイル共有用のディレクトリをマウントしてコンテナを作成します。

 

これでホストOSの/home/tzm/docker/shareディレクトリがコンテナの/shareでアクセス出来るようになります。

 

3. mysqlのダンプを取ってマウントしたディレクトリ内に格納してコンテナを落とす。

 

4. mysqlデータ共有ディレクトリをマウントして再度コンテナ起動。

 

今回はzabbix使うのでポート転送は443と10051を指定。

1で作成した共有ディレクトリも全てマウント。

 

5. コンテナ内でmysqlの初期化及び設定を行う。

mysqlの初期化

 

mysql起動

 

ダンプファイルのディレクトリに移動してmysqlにログイン。パスワードも設定。

 

zabbixデータベース、zabbixユーザを作成してdumpデータをzabbixデータベースにインポート

 

これでマウントしたコンテナ内で作成されるmysqlデータは

ホストOSの/home/tzm/docker/mysqlに格納されてcommitせずともデータが永続化します。