APIのデータ保存用のMySQLをローカル環境に用意したいのでDockerを使用して用意する。
Dockerインストール
Docker Desktopをダウンロード(MAC)
Docker公式ページ
See Docker Desktop for Macを見ながらインストール。
Docker DesktopのマニュアルはDocker Desktop for Mac user manualを参照。
MySQLのコンテナを作成
DockerHubのMySQLリポジトリのDescriptionを見て進める。
まずDockerHubからMySQLのイメージを取得
docker pull mysql
次にDB用のディレクトリを適当に用意してdocker-compose.ymlファイルを作って配置しておく。
内容はほぼリファレンスそのままでテーブル定義のファイルの格納場所を指定するためにvolumesを追加した。
ファイル名はstack.ymlじゃなくてdocker-compose.ymlにすればdocker-compose実行時に-fオプションでファイル名を定義しなくて済む。
# Use root/example as user/password credentials
version: '3.1'
services:
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: <password>
volumes:
- ./init:/docker-entrypoint-initdb.d
adminer:
image: adminer
restart: always
ports:
- 8080:8080
そしてテーブルの初期化設定ファイルを作成。MySQLのマニュアルを見ながらテーブル定義を以下のような感じで作成した。
MySQL Reference Manual (urlのところをenからjpにすれば日本語版が見れるがバージョンが古い)
CREATE DATABASE
CREATE TABLE
Data Types
CREATE DATABASE task_db;
USE task_db;
CREATE TABLE task (
task_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(500),
description VARCHAR(5000),
created_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
ここまでやってdocker-composeを実行(-dオプションでバックグランド実行)
$ docker-compose up -d
イメージの確認とテーブル定義の確認
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d41ff8d9311d mysql "docker-entrypoint.s…" 13 seconds ago Up 11 seconds 3306/tcp, 33060/tcp task-db_db_1
$ docker exec -it d41ff8d9311d bash -p
root@d41ff8d9311d:/# mysql -u root -p
Enter password:
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| task_db |
+--------------------+
5 rows in set (0.00 sec)
mysql> USE task_db;
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> SHOW TABLES;
+-------------------+
| Tables_in_task_db |
+-------------------+
| task |
+-------------------+
1 row in set (0.00 sec)
mysql> SHOW COLUMNS FROM task;
+--------------+---------------+------+-----+-------------------+-----------------------------------------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------------+------+-----+-------------------+-----------------------------------------------+
| task_id | int | NO | PRI | NULL | auto_increment |
| title | varchar(500) | YES | | NULL | |
| description | varchar(5000) | YES | | NULL | |
| created_time | datetime | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| updated_time | datetime | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
+--------------+---------------+------+-----+-------------------+-----------------------------------------------+
5 rows in set (0.01 sec)
停止させる時の手順
mysql> quit
Bye
root@d41ff8d9311d:/# exit
exit
docker-compose stopで停止、docker-compose downで停止とコンテナ削除
コメントを残す