ウェブエンジニア珍道中

日々の技術的に関する経験を書いていきます。脱線もしますが助けになれば幸いです。

検証・勉強用にDockerでmysql環境を用意した話

mysqlの勉強のために簡単に環境を構築・破棄したかったのでDockerで準備しました。

手順

Dockerのインストールは割愛します、今回はDocker for Macで行いました。

作業ディレクトリを用意する

作業用のディレクトリを作って入ります。これはコンテナとファイル共有をしたかったためです。(後ほど解説)

$ mkdir mysql_test_ws
$ cd mysql_test_ws

検証用のコンテナを立ち上げる

以下のコマンドを叩きます。

$ docker run --name mysql_test -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -v $PWD:/mysql_test_ws -d mysql:latest

オプションは以下の通りです。

オプション 効果
--name mysql_test コンテナに名前を付ける、後で操作しやすいように
-e MYSQL_ALLOW_EMPTY_PASSWORD=yes パスワード無しで操作できるようにする、勉強用なのでセキュリティは度外視
-v $PWD:/mysql_test_ws カレントディレクトリとコンテナの/mysql_test_wsを同期
-d detachしてコンテナから抜ける

これでmysqlのコンテナが立ち上がります。

$ docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
33339e317dde        mysql:latest        "docker-entrypoint..."   9 minutes ago       Up 9 minutes        3306/tcp            mysql_test

バージョンを指定したい時はmysql:latestのタグ(latest)を適宜変えて下さい。

あとは中でクエリを叩いて検証します。

$ docker exec -it mysql_test mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.21 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

.sqlファイルを用意して流す

既にホストとコンテナでファイルは同期しているので、.sqlファイルを流し込みたい時にはmysql_test_wsディレクトリに移すだけでOKです。

drop database if exists hoge;
create database hoge;
use hoge;
create table authors(id int NOT NULL AUTO_INCREMENT, name varchar(255), primary key (id));

上記の様なsqlファイル(今回はhoge.sql)をmysql_test_wsディレクトリに用意します。べき等性を気にして毎回データベースをぶっ壊して作り直すロックなsqlにしております。検証のための初期データを入れるためのinsert文なんかも入れて良いと思います。

後はコンテナに入って流し込みます。

$ docker exec -it mysql_test bash

# 以下コンテナ内
cd /mysql_test_ws
mysql < hoge.sql

これで完了です。

Dockerを使えばmysqlのインストール作業が全くいらないので、とても楽に検証・勉強用の環境が整いました。nginxなど他のミドルウェアも勉強する時はDockerでいいやーと思ってます。それくらい楽ちんです。Dockerは覚えておいて良かったです。