構成
project/
|-- sql/
| |-- init.sql
`-- docker-compose.yml
docker-compose.yml
version : '3'
services:
db:
image: mysql:latest
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: example
MYSQL_USER: user
MYSQL_PASSWORD: password
TZ: Asia/Tokyo
volumes:
- ./sql:/docker-entrypoint-initdb.d
コンテナ初回起動時に/docker-entrypoint-initdb.d
にある.sh
、.sql
、.sql.gz
拡張子のファイルがアルファベット順に実行されるので./sql
を/docker-entrypoint-initdb.d
にマウントします。
それにより./sql/init.sql
が実行されることになります。
init.sql
DROP TABLE IF EXISTS `users`;
create table `users` (
`user_id` BIGINT(20) AUTO_INCREMENT,
`user_name` VARCHAR(36) NOT NULL,
`user_created_at` DATETIME DEFAULT '0000-00-00 00:00:00',
UNIQUE KEY uq_keys(user_name),
PRIMARY KEY (`user_id`)
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
INSERT INTO users (user_name, user_created_at) VALUES ('Michael', now());
起動
docker-compose up -d
データ確認
コンテナIDの確認
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
32b99b6a0b1a mysql:latest "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
CONTAINER ID
をコピーします。
コンテナに接続
docker exec -it 32b99b6a0b1a bash
MySQLに接続
mysql -u root -p
Enter password:
データベース確認
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| example |
| mysql |
| performance_schema |
| sys |
+--------------------+
テーブル確認
mysql> use example;
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
mysql [example]> show tables;
+-------------------+
| Tables_in_example |
+-------------------+
| users |
+-------------------+
データ確認
mysql [example]> select * from users;
+---------+-----------+---------------------+
| user_id | user_name | user_created_at |
+---------+-----------+---------------------+
| 1 | Michael | 2021-08-14 11:22:53 |
+---------+-----------+---------------------+
変更が反映されない場合
マウントしたsqlは初回起動時のみ実行されるのでinit.sql
を編集して再度適用させたい場合は、docker-compose down
で一度コンテナを削除してから再度docker-compose up -d
してみてください。