LoginSignup
0
2

More than 3 years have passed since last update.

DockerでMySQL環境を0 -> 1で作る

Posted at

本記事でやること

DockerでMySQL環境を作る
Databaseを作る
テーブルを作る
データをいれる

環境

Docker
mysql 5.7

DockerでMySQL環境を作る

本記事で使う親フォルダを作る

$ mkdir mysql-sample

そして、 docker-compose.yml を作る

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に書く。

msql/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 というフォルダができる

スクリーンショット 2021-01-10 22.08.55.png

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) (文字列) ユーザー名
email 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
0
2
2

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
0
2