2014-03-16

dockerコンテナで動くmysqlを永続化してみる【Zabbix編】

今回は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に任意のディレクトリを作成。

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

$ mkdir /home/tzm/docker/share
$ mkdir /home/tzm/docker/mysql

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

 

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

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

$ docker run -v /home/tzm/docker/share:/share -i -t tzm/zabbix /bin/bash

 

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

 

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

$ cd /share
$ mysqldump -u root -p zabbix > dump.sql
$ exit

 

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

$ docker run -v /home/tzm/docker/mysql:/var/lib/mysql \
-v /home/tzm/docker/share:/share -p 443:443 -p 10051:10051 -i -t tzm/zabbix /bin/bash

 

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

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

 

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

mysqlの初期化

$ mysql_install_db

 

mysql起動

$ mysqld_safe &

 

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

$ cd /share
$ mysql -u root
mysql> SET PASSWORD FOR root@localhost = PASSWORD('newpass');

 

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

mysql> create database zabbix
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'password';
mysql> flush privileges;
mysql> use zabbix;
mysql> source dump.sql

 

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

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

このエントリーをはてなブックマークに追加