データの詰まったmysqlのdocker imageを簡単に作成する

はじめに

mysqlはオフィシャルのdocker imageを提供しているが、実はこれがいろいろ便利だったりするので紹介。

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

Initializing a fresh instance

When a container is started for the first time, a new database with the specified name will be created and initialized with the provided configuration variables. Furthermore, it will execute files with extensions .sh, .sql and .sql.gz that are found in /docker-entrypoint-initdb.d. Files will be executed in alphabetical order. You can easily populate your mysql services by mounting a SQL dump into that directory and provide custom images with contributed data. SQL files will be imported by default to the database specified by the MYSQL_DATABASE variable.

/docker-entrypoint-initdb.dへ.sh, .sql and .sql.gzファイルを置けば、アルファベット順に読まれる。SQLファイルはimportされる。

何も考えず置けばよいらしいのだ。Dockerfileにいろいろ書かないで済むようなのである。

やってみた

昔MySQLはサンプルデータを公開していると書いたし、せっかくなので、そのデータをつかう。 https://qiita.com/S-T/items/923cf689ee5f44525457

http://downloads.mysql.com/docs/world.sql.gz

をダウンロードすることにする

Dockerfileを記載

MySQL 5.7のオリジナルイメージを持ってきて、

先ほどダウンロードしたsql.gzファイルを/docker-entrypoint-initdb.dにコピー。

これだけ。

buildする

無事docker imageが出来上がった

このmysql-sampledataを起動させる。

MYSQL_ALLOW_EMPTY_PASSWORDオプションでパスワード無しでログインできるようになる。

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

MYSQL_ALLOW_EMPTY_PASSWORD

This is an optional variable. Set to yes to allow the container to be started with a blank password for the root user. NOTE: Setting this variable to yes is not recommended unless you really know what you are doing, since this will leave your MySQL instance completely unprotected, allowing anyone to gain complete superuser access.

パスワードを付与したい場合は以下のオプションを利用する

 -e MYSQL_ROOT_PASSWORD=mysql

ログインしてみる

パスワードなしでmysqlの中に入れる

show databases;を行うと、先ほどimportしたworldというデータベースが見える

もちろん中身もある

mysqldumpの結果を入れることもできるし、いろいろ使えそうだ。

 

外部から接続する場合

ポートを付与する。