1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

docker-composeでMySQLを起動してみた

Last updated at Posted at 2019-12-02

docker-composeでMySQLを起動してみた

開発環境

  • Windows10
  • IntelliJIDE
  • Docker for Windows
  • MySQL8.0

作業内容

  • docker-composeを利用して、MySQLイメージをコンテナで起動

docker-composeでMySQL構築

  1. docker-composeのバ‐ジョン確認
>docker-compose --version
docker-compose version 1.24.1, build 4667896b
  1. ディレクトリの作成
prototype-docker/
             ├ docker/
             |       └ mysql/
             |              ├ conf.d/
             |              |       └ my.cnf
             |              ├ initdb.d/
             |              |         ├ schema.sql
             |              |         └ testdata.sql
             |              └ Dockerfile
             └ docker-compose.yml 
  1. Dockerfileの作成

Dockerfileにイメージのビルド内容を記述します。

FROM mysql:8.0
# 指定の場所にログを記録するディレクトリを作る
RUN mkdir /var/log/mysql
# 指定の場所にログを記録するファイルを作る
RUN touch /var/log/mysql/mysqld.log
  1. 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
  1. 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
  1. 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 = 'ユーザー'
;
  1. 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);
  1. 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
  1. 初期化クエリ実行確認

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)

ソースコード

ref: https://github.com/forests-k/prototype-docker

1
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?