見出し画像

使い捨てローカル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接続時の設定ファイル。ファイル自体は必須では無いが必要に応じて追加する。

ほとんどの MySQL プログラムはオプションファイル (構成ファイルと呼ばれることもあります) から起動オプションを読み取ることができます。オプションファイルは、よく使用されるオプションを指定するための便利な方法を提供し、プログラムを実行するたびにコマンド行で入力する必要がなくなります。MySQL サーバーには MySQL によって多数の事前構成済みのオプションファイルが提供されます。

MySQL 5.6 リファレンスマニュアル 4.2.6 オプションファイルの使用

・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オプションで指定した左側のポート番号)。

--name:コンテナ名を指定
-d:バックグラウンドモードの指定(ターミナルで続けて操作可能にする)
-v:データベース情報保存先の指定(tempディレクトリが自動で作成される)
-p:コンテナ接続ポート番号、MySQL接続ポートの指定
mysql-sample-image:v1.0.0:起動に用いるDockerイメージの指定

$ 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で接続。他のアプリケーションでも必要になる情報は同じと思われる。

Name:自由に名前を付ける
Host:127.0.0.1
UserName:Dockerfileの「MYSQL_USER」で指定した値
Password:Dockerfileの「MYSQL_PASSWORD」で指定した値
Port:「docker run」実行時に-pオプションで指定した左側の値

「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は重宝すると思う。


この記事が気に入ったらサポートをしてみませんか?