お世話になっております。
しゃまとんです。

前回はRedisと連携をやってみたので、今回はMySQLコンテナを作ってみようと思います。
MySQLは試しにAWSのRDSでデフォルトっぽい5.6.27(2016/12/13時点)で作成してみます。

OSは前回と同じでCentOS6を使います。
ちなみに前回の記事はこちら

MySQLは公式でもイメージが用意されていますが、Dockerfileを見てもややこしい印象。

で他の方々のを拝見している感じだと

・my.cnf(MySQLの設定ファイル)
・mysql用のスクリプト

を事前に作成するなどして、コンテナ起動させている感じだな〜ということで参考にしつつDockerfileから。

CentOS6では標準でインストールされるMySQLが古いためrpmを取得してMySQL公式のリポジトリを有効にします。
そして、指定のバージョンでyum installします。
もしかしてmakeとかしないと行けないのかと思っていましたが、公式ありがとう。

そして、MySQLの設定ファイルを置き換えて、起動用スクリプトをコピーします。
最後にPORTを設定し、スクリプトを実行するようにします。

my.cnfはでデフォルトで用意されているものにエンコード設定などを少し追加しました。
なので純粋に起動確認するだけなら、置き換えはしなくていいと思います。

そして、起動スクリプトです。起動時にファイルがあるか確認してない場合、初期化を実行させるようにしました。
今回は初期化とユーザー、データベース作成までおこなってみました。
sleepは進捗がわかりやすいようにわざと入れています。

準備が整ったので、実行してみます。
成功するとコンテナが生成されmysqlのプロセスが起動した状態になります。

 docker build -t mysql56 .
Sending build context to Docker daemon 13.31 kB
... skip ...

$ docker run --name mysql_test mysql56
initialize...
Installing MySQL system tables... [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. 
Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

... skip ...

mysqld_safe Logging to '/var/log/mysqld.log'.
mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

もう1つターミナルを開いて、中身を覗いてみます。

MySQLが起動してユーザーとデータベースが作成されているのが確認できました。
このコンテナですが、消してしまうとデータが全て消えてしまいます。
データを残して他コンテナで使いたい場合は別でデータ保存部分を用意する必要があるようです。 またこの辺もやってみたいと思います。

以上です。

■ 参考