使い捨てローカルDB(MySQL)をDockerで用意する
概要
仕事でもプライベートでの学習でも、使い捨て感覚でデータベースを用意してあれこれ実験したい場合がある。コンテナを習い始めて、そうかコンテナでデータベース調達すればいいんだと気付いたのでやってみる。
準備
▼ファイル配置
.
├── Dockerfile
└── my.conf
・my.conf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
[client]
default-character-set=utf8mb4
[mysqldump]
default-character-set=utf8mb4
MySQL接続時の設定ファイル。ファイル自体は必須では無いが必要に応じて追加する。
・Dockerfile
FROM mysql:5.7
ENV MYSQL_DATABASE sample
ENV MYSQL_ROOT_PASSWORD password
ENV MYSQL_USER test
ENV MYSQL_PASSWORD password
COPY ./my.conf /etc/mysql/conf.d/my.cnf
コンテナのイメージを作成するためのファイル。イメージレジストリで提供されているmysqlの指定、接続情報、オプションの設定ファイルの指定を行う。「ENV」の値は適宜変更する。本来認証情報は環境変数から取得すべきであるが、完全自分専用の使い捨てコンテナのためセキュリティもくそもなく直書きしている。
実行
▼Dockerイメージの作成
$ docker build -t mysql-sample-image:v1.0.0 .
「-t」オプションでタグ名を自由に設定する(必要に応じてバージョン指定を行う)。最後の引数はイメージ作成用のDockerfileの配置場所をカレントディレクトリからの相対パスとして指定している(上記指定はターミナルなどでDockerfileと同じ階層に移動していることが前提ということになる)。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql-sample-image v1.0.0 899e74fb1cf4 8 minutes ago 450MB
Dockerイメージが作成されたことを確認。
▼Dockerイメージからコンテナを起動
$ docker run --name mysql-sample -d -v $PWD/temp:/var/lib/mysql -p 12345:3306 mysql-sample-image:v1.0.0
run以降で幾つか指定を行なっている。この後の↓の作業で必要になるのはコンテナ名とコンテナ接続ポート番号(-pオプションで指定した左側のポート番号)。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
769addf1d48e mysql-sample-image:v1.0.0 "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 33060/tcp, 0.0.0.0:12345->3306/tcp mysql-sample
コンテナが起動していることを確認。ここで起動していない場合は「docker logs mysql-sample」とコンテナ名を指定してログを確認して対応する。
▼MySQLコンテナの中に入り動作確認
念の為行っておく程度で必須ではない。
// コンテナに入る
$ docker exec -it mysql-sample /bin/bash
root@769addf1d48e:/#
// mysqlログイン(Dockerfileで設定した「MYSQL_USER」「MYSQL_PASSWORD」を指定する)
root@769addf1d48e:/# mysql -u test -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
〜 割愛 〜
// デフォルトデータベースが存在することを確認
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| sample |
+--------------------+
2 rows in set (0.02 sec)
// sampleのデータベースが参照できることを確認
mysql> use sample
Database changed
// 確認できたのでmysqlとコンテナそれぞれからexitで退出
mysql> exit
Bye
root@769addf1d48e:/# exit
▼データベースマネジメントアプリケーションで接続
任意のデータベースマネジメントアプリケーションで接続する。例としてSequelAceで接続。他のアプリケーションでも必要になる情報は同じと思われる。
「Test Connection」で接続テストが問題無ければ「接続」を行う。
接続後に操作するデータベースを選択するため、画面の「データベースを選択」から「sample」を選択(上の接続ダイアログの「Database」に「sample」を指定している場合は不要)。
適当なテーブルを作成し、SQLが問題なく実行出来ることを確認。
CREATE TABLE sample_table (
id INT(11) AUTO_INCREMENT NOT NULL,
name VARCHAR(30) NOT NULL,
age INT(3) NOT NULL,
created_at DATETIME NOT NULL,
PRIMARY KEY (id)
);
select * from `sample_table`;
あとがき
仕事環境だと調達に手間が掛かったり適当に試すのが憚られたり、プライベートの開発でもごちゃごちゃ実験テーブルを混ぜたくなかったりするので使い捨てDBは重宝すると思う。
この記事が気に入ったらサポートをしてみませんか?