本記事でやること
DockerでMySQL環境を作る
Databaseを作る
テーブルを作る
データをいれる
環境
Docker
mysql 5.7
DockerでMySQL環境を作る
本記事で使う親フォルダを作る
$ mkdir mysql-sample
そして、 docker-compose.yml を作る
version: "3"
services:
mysql:
image: mysql:5.7
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: mysql
volumes:
- "./mysql/db-data/:/var/lib/mysql" # データ永続化
- "./mysql/my.cnf:/etc/mysql/conf.d/my.cnf" # 日本語をデータとして使うために必要
MySQL関連のデータをおく場所として mysql フォルダを作る.
そして、MySQLの設定ファイルはmy.cnfに書く。
[mysqld]
character-set-server=utf8
これによりmysqlのデータとして日本語を入力することができる
mysql-sample
├── docker-compose.yml
└── mysql
└── my.cnf
mysql clientはmysqlのイメージに含まれている。
本記事ではそれを使う。
docker-compose up -d
でコンテナを立ち上げる。
すると、mysqlが初期化され、
プロジェクトのmysqlフォルダ以下に db-data というフォルダができる
Attach Shellでコンテナに入る
mysql clientを以下で起動
$ mysql -u root -p
パスワードは docker-compose.yml で設定した mysql
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
...
mysql>
これでmysqlを起動するまで完了
databaseを作る
dbを全て表示
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.04 sec)
mysql>
ここに新しく sample というdbを追加する
mysql> create database sample;
Query OK, 1 row affected (0.02 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sample |
| sys |
+--------------------+
5 rows in set (0.02 sec)
mysql>
このdbを操作するために以下のコマンドを打つ
mysql> use sample;
Database changed
これでdb作成まで完了
テーブル作成
最初はテーブルはない。
mysql> show tables;
Empty set (0.01 sec)
mysql>
そこで、テーブルを作るコマンドを打つが、テーブルを打つコマンドは長いので先にテキストエディタ等で書いておく
CREATE TABLE users (
id int PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
password CHAR(36) NOT NULL
);
usersというテーブルを作成する。
このクエリについての解説はざっくり以下
カラム | 型 | 説明 |
---|---|---|
id | int(数値) | userを特定するための数字。主キー。自動連番 |
username | varchar(255) (文字列) | ユーザー名 |
varchar(255) | メールアドレス、重複させないためにUNIQUE | |
password | CHAR(36) (36字以内の英文字) |
パスワード。UUIDの文字列にあわせて36 |
上記のクエリをそのままはりつけて実行
mysql> CREATE TABLE users (
-> id int PRIMARY KEY AUTO_INCREMENT,
-> username VARCHAR(255) NOT NULL,
-> email VARCHAR(255) NOT NULL UNIQUE,
-> password CHAR(36) NOT NULL
-> );
Query OK, 0 rows affected (0.07 sec)
mysql> show tables;
+------------------+
| Tables_in_sample |
+------------------+
| users |
+------------------+
1 row in set (0.01 sec)
mysql> show columns from users;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(255) | NO | | NULL | |
| email | varchar(255) | NO | UNI | NULL | |
| password | char(36) | NO | | NULL | |
+----------+--------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)
mysql>
これでテーブル作成完了
データを追加
UUIDの作成。
macならuuidgenでさくっと作れる。
powershellなら[Guid]::NewGuid()
=> 224A68FF-FB77-4F97-94CF-8B7AD846DE05
insert into users (username, email, password) values ("Teach", "teach@example.com", "uooooo");
mysql> insert into users (username, email, password) values ("Teach", "teach@example.com", "uooooo");
Query OK, 1 row affected (0.01 sec)
mysql>
データの取得
mysql> select * from users;
+----+----------+-------------------+----------+
| id | username | email | password |
+----+----------+-------------------+----------+
| 1 | Teach | teach@example.com | uooooo |
+----+----------+-------------------+----------+
1 row in set (0.00 sec)
mysql>
補足
Dockerの他のコンテナからdbをみるときのhostは docker-compose.yml のservice名になる。
したがって以下のように接続する
mysql -u root -h mysql -p