docker-composeでMySQLを起動してみた
開発環境
- Windows10
- IntelliJIDE
- Docker for Windows
- MySQL8.0
作業内容
- docker-composeを利用して、MySQLイメージをコンテナで起動
docker-composeでMySQL構築
- docker-composeのバ‐ジョン確認
>docker-compose --version
docker-compose version 1.24.1, build 4667896b
- ディレクトリの作成
prototype-docker/
├ docker/
| └ mysql/
| ├ conf.d/
| | └ my.cnf
| ├ initdb.d/
| | ├ schema.sql
| | └ testdata.sql
| └ Dockerfile
└ docker-compose.yml
- Dockerfileの作成
Dockerfileにイメージのビルド内容を記述します。
FROM mysql:8.0
# 指定の場所にログを記録するディレクトリを作る
RUN mkdir /var/log/mysql
# 指定の場所にログを記録するファイルを作る
RUN touch /var/log/mysql/mysqld.log
- docker-compose.ymlの作成
docker-compose.ymlにMYSQLの設定を記述します。
version: '3.3'
services:
db:
build: ./docker/mysql
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: prototype
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
TZ: 'Asia/Tokyo'
ports:
- "3306:3306"
volumes:
- ./docker/mysql/initdb.d:/docker-entrypoint-initdb.d
- ./docker/mysql/conf.d:/etc/mysql/conf.d
- my.confの作成
my.confに、独自のMySQLの設定を記述します。
[mysqld]
# mysqlサーバー側が使用する文字コード
character-set-server=utf8mb4
# テーブルにTimeStamp型のカラムをもつ場合、推奨
explicit-defaults-for-timestamp=1
# 実行したクエリの全ての履歴が記録される(defaultではOFF)
general-log=1
# ログの出力先
general-log-file=/var/log/mysql/mysqld.log
[client]
# mysqlのクライアント側が使用する文字コード
default-character-set=utf8mb4
- schema.sqlの作成
初期化するテーブル定義のDDLを記述します。
create TABLE IF NOT EXISTS `prototype`.`users` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT 'ユーザーID'
, `mail` VARCHAR (256) NOT NULL COMMENT 'メールアドレス'
, `gender` SMALLINT (1) NOT NULL COMMENT '性別'
, `password` VARCHAR (256) NOT NULL COMMENT 'パスワード'
, `birthdate` DATE NOT NULL COMMENT '生年月日'
, `create_user_id` INT NULL COMMENT '作成者ID'
, `create_timestamp` TIMESTAMP NULL COMMENT '作成日時'
, PRIMARY KEY (`id`)
, UNIQUE INDEX `mail_UNIQUE` (`mail`)
) ENGINE = Innodb
, DEFAULT character set utf8
, COMMENT = 'ユーザー'
;
- testdata.sqlの作成
初期化したテーブルに投入するデータのDMLを記述します。
INSERT INTO users(mail, gender, password, birthdate, create_user_id, create_timestamp)
VALUES
('test@gmail.com', 1, '暗号化したパスワード', '1991/01/01', 0, current_timestamp);
- docker-composeコマンドの実行
ディレクトリ構成と各種ファイルの作成が完了したら、docker-composeコマンドを実行します。
> docker-compose up -d #コンテナの起動
Creating prototype-docker_db_1 ... done
>docker-compose ps #存在するコンテナの一覧とその状態を表示
Name Command State Ports
-----------------------------------------------------------------------------------------------
prototype-docker_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
- 初期化クエリ実行確認
schema.sqlとtestdata.sqlの実行結果を確認します。
>docker exec -it prototype-docker_db_1 bash
root@aabd0f319f85:/# mysql -u user -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 24
Server version: 8.0.18 MySQL Community Server - GPL
Copyright (c) 2000, 2019, 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> show tables from prototype;
+---------------------+
| Tables_in_prototype |
+---------------------+
| users |
| users_history |
+---------------------+
2 rows in set (0.00 sec)