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は覚えておいて良かったです。