【Docker-02】Docker for Macで使い捨てMySQL環境の作成


はじめに

SQLの練習をしたい時にローカルで使い捨てできる環境あると良いなーと思っていたらDockerで簡単に実現できそうなのでやってみました。
仮想環境の知識が乏しい時はAWSに立てるか?とか考えてたので正気じゃないですね

本記事の執筆にあたり、「Dockerで使い捨てのMySQL環境を用意する。事前データを投入して起動する。」を出典とさせて頂きました。この場を借りてお礼申し上げます!

やってみる

Docker Desctop for Macのインストール

公式からインストールします。
https://docs.docker.com/docker-for-mac/install/

書いてて思い出しましたが、確かブラウザでDockerの起動とか練習するSaasがあったような。。?
そちらでもMySQL環境作成できるかもしれませんね。本記事では割愛させて頂きます。

コンテナの起動

MySQL公式のイメージを使用するので、いきなり起動。便利すぎる。

コマンドは改行せずに1行で書き切ってもOKです。
パスワードは確か英小文字大文字数字の8行とか9行じゃないとダメだったような気がしますが、適当に入力してもログインできました。なんでだw

サイトに倣い、ポートは43306をマッピング。3306:3306でも良いと思います。

$ docker container run --rm -d \
> -e MYSQL_ROOT_PASSWORD=okome \
> -p 43306:3306 --name mysql mysql:5.7

mysqlに接続

ローカルのシェルでmysqlしたら怒られた。
「mysql」コンテナのシェルを起動した後にmysqlに接続するのが正解のようです。
パスワードはコンテナ起動時に指定した「okome」を入力。

$ docker exec -it mysql /bin/bash
# mysql -uroot -p
Enter password:

mysql>

うおお動いた!早い!かんたん!
特に.mysqlは指定していないのでまっさらの初期状態ですが、勉強目的の使い捨て環境と考えるなら全然問題ないですね。捗るぜ。。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

事前にデータ投入して起動する

Dockerで使い捨てのMySQL環境を用意する。事前データを投入して起動する。」のリンクにあった「事前にデータ投入をした MySQL Docker イメージを作る場合は /docker-entrypoint-initdb.d を活用すると便利」を拝読すると、docker-entrypoint-initdb.d/にテーブルや実データを定義したgzやgzipを置けばコンテナ起動時に読み込んでくれるとのこと。

Dockerfileをサイト通りに記述し、公式からダウンロードしたworld.sql.gzを同じディレクトリに配置します。

$ cat Dockerfile
FROM mysql:5.7

COPY world.sql.gz /docker-entrypoint-initdb.d/world.sql.gz

$ ls -l
Dockerfile
world.sql.gz

配置後はイメージをビルドし、起動。

$ docker build -t mysql-image .
$ docker container run -e MYSQL_ROOT_PASSWORD=okome --name mysqlserver -d mysql-image

シェルを起動してmysqlに接続。
world databaseできとるやん。。素晴らしすぎる。

$ docker container exec -it mysqlserver /bin/bash
# mysql -uroot -p
Enter password:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| world              |
+--------------------+
5 rows in set (0.00 sec)

mysql> use world
Database changed
mysql> show tables;
+-----------------+
| Tables_in_world |
+-----------------+
| city            |
| country         |
| countrylanguage |
+-----------------+
3 rows in set (0.01 sec)

コンテナを停止する時は普通にdocker stopで。
run→stopしたコンテナを再起動するときはstartで行います。

$ docker stop mysqlserver
$ docker start mysqlserver #PIDでも可

おわりに

実際に手を動かすと、Dockerの可搬性の高さを実感できますね。
DB周りの知識が弱いんで、これを使ってガリガリ手を動かします!

オプションも散らかってきたので整理しなきゃですね。
あと薄々気づいてはいたのですが、dockerコマンドのcontainerって省略できたんですね。
それが一番有益だったかもしれないw

簡単ですが以上です。