概要
開発でMySQLをローカル環境で構築する必要があったため、Dockerを使って試してみました。
また、初期データを入れる方法も調べて検証してみました。
準備
フォルダ構成
dev/01.sql
docker-compose.yml
docker-compose.yml
db:
image: mysql:latest
volumes:
- ./dev:/docker-entrypoint-initdb.d
environment:
- MYSQL_ROOT_PASSWORD=root
上記のように、./dev
下にsqlファイルを置くことでDocker compose実行時に実行してくれます。
フォルダ名は./dev
である必要はありません。
When a container is started for the first time, a new database with the specified name will be created and initialized with the provided configuration variables. Furthermore, it will execute files with extensions .sh, .sql and .sql.gz that are found in /docker-entrypoint-initdb.d
初期データ登録用SQL
今回は以下のSQLを用意し、後でテーブル内の値を取得してみます。
DROP SCHEMA IF EXISTS sample;
CREATE SCHEMA sample;
USE sample;
DROP TABLE IF EXISTS employee;
CREATE TABLE employee
(
id INT(10),
name VARCHAR(40)
);
INSERT INTO employee (id, name) VALUES (1, "test1");
INSERT INTO employee (id, name) VALUES (2, "test2");
検証結果
Docker compose 起動
以下コマンドでDockerを起動してみます。
docker-compose up
ログをみると、01.sqlが実行されていることが分かります。
db_1 | 2022-06-14 12:58:54+00:00 [Note] [Entrypoint]: /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/01.sql
MySQLへの接続確認
以下コマンドでコンテナIDを確認します。
docker ps
以下コマンドでコンテナ内のMySQLにログインしてみます。
パスワードはdocker-compose.yml内のMYSQL_ROOT_PASSWORDの値を指定します。
docker exec -it コンテナID mysql -u root -p
Enter password:
ログインに成功すると、以下のような画面になります。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.29 MySQL Community Server - GPL
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
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>
初期データの確認
データベースを選択します。
mysql> use sample;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
テーブル内の値をselectしてみると、01.sqlで流したデータが格納されていることが分かります。
mysql> select * from employee;
+------+---------+
| id | name |
+------+---------+
| 1 | test1 |
| 2 | test2 |
+------+---------+
2 rows in set (0.00 sec)
まとめ
DockerでMySQLを動かす&初期データも入れる方法を紹介しました。
この方法により、自身のPCを汚すことなく、MySQLをガチャガチャ触れるようになります。
開発の効率が上がると思うので、ぜひ試してみてください。
参考