mysqlのdockerイメージを使ってみた #MySQL #docker

概要

DockerHubにあるMySQLの公式イメージを使ってみた。

※Docker for Mac使用

https://hub.docker.com/_/mysql/

イメージを持ってくる

5.6のイメージを使ってみることにする。

$ docker pull mysql:5.6

ダウンロードを確認

$ docker images

起動する

とりあえず13306ポートでrunしてみる

docker run \
  -d \
  --name mysql-docker \
  -p 13306:3306 \
  --env MYSQL_ALLOW_EMPTY_PASSWORD=yes \
  mysql:5.6

MYSQL_ALLOW_EMPTY_PASSWORD=yes としておくことで、パスワード無しで接続できる。

dockerで初期設定っぽいものをパラメータ的に渡すのは環境変数を使うのがセオリーなのかな?

mysqlコマンドで繋いでみる

MySQLはデフォルトポート以外を使う場合、localhostでは接続できないので、IPでつなぐ。

$ mysql -u root -h 127.0.0.1 -P 13306
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.37 MySQL Community Server (GPL)

設定ファイルを使う

自前の設定を使う場合、設定ファイルの配置場所をDocker側にマウントさせる。

たとえば設定ファイルが /my/custom/config-file.cnf の場合なら --volume /my/custom/config-file.cnf:/etc/mysql/conf.d を指定する。

volumeオプションは相対パスだとうまく動かなくて、どうやら絶対パスじゃないとダメなようだ。

docker run \
  -d \
  --name mysql-docker \
  -p 13306:3306 \
  --env MYSQL_ALLOW_EMPTY_PASSWORD=yes \
  --volume /my/custom/config-file.cnf:/etc/mysql/conf.d \
  mysql:5.6

mysqlにつないだら show variables とかで設定ファイルの内容が反映されているか確認できる。

パス系の設定は注意

無邪気に出来合いの設定ファイルを渡すとうまく動かなかったり、コンテナが終了したりする。

ログファイルの場所など、パスが絡む設定はそのままだと使えなそう。

とりあえず必要ならコンテナの中に入って参照すればいいと思うので、渡す設定からは外すことにした。

まとめ

他にも起動時にデータベースを作成することもできたり、初期SQLを流し込んだりもできるみたい。

公式のイメージを使ってやりたいことは一通りできそうなので、とても便利である。

忘れそうなのでGitHubに残しておいた。

GitHub - su-kun1899/mysql: mysql 関連の置き場

参考

dqn.sakusakutto.jp