DockerでMySQLデータベースを用意する

作成:2021.09.05

更新:2021.09.05

データベース

Dockerとは?

仮想環境を手軽に用意できるソフトウェア。

環境の準備

Docker Desctopをインストール

Homebrewでインストール。

ターミナル
brew install --cask docker

バージョンを確認。

ターミナル
docker --version
ターミナル(出力結果)
Docker version 20.10.8, build 3967b7d

Docker Desctopを起動

ターミナル
open -a Docker

Docker Desktop needs privileged access

「OK」を選択してアクセスを許可。

Our Service Agreement has Changed

Docker Desktopが一部有料化になる件のメッセージ。
「I accept the terms」をチェックして「Accept」を選択。

ディレクトリ構成

任意のディレクトリ(たとえば~/study/database)を作成し、以下のようなディレクトリ構成を用意する。

~/study/database
database
└── docker
    └── db
        └── data

docker-composeファイルの作成

~/study/database/docker-compose.yml
# docker-composeのバージョン
version: '3'

# サービス情報
services:
  mysql-test:
    # M1 Macで「no matching manifest for linux/arm64/v8 in the manifest list entries」となるエラーを回避
    platform: linux/x86_64

    # 使用するイメージ
    image: mysql:5.7

    # コンテナ名
    container_name: mysql

    # 環境変数
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE     : sample_db

    # ポート
    ports:
    - 3306:3306

    # 永続化
    volumes:
    - ./docker/db/data:/var/lib/mysql

コンテナを起動する

ターミナル(~/study/database)
docker-compose up -d

成功すれば以下のように表示される。

ターミナル(出力結果)
Creating mysql ... done

念のため起動しているか確認。

ターミナル(~/study/database)
docker-compose ps

Stateが「Up」になっていればOK。

ターミナル(出力結果)
Name              Command             State                          Ports                       
-------------------------------------------------------------------------------------------------
mysql   docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp

コンテナの中に入る。

ターミナル(~/study/database)
docker exec -it mysql bash

これでmysqlが使えるようになる。
試しにバージョンを確認してみる。

ターミナル
mysql --version
ターミナル(出力結果)
/usr/bin/mysql  Ver 14.14 Distrib 5.7.35, for Linux (x86_64) using  EditLine wrapper

コンテナから出る。

ターミナル(/)
exit

試しにデータを登録してみる

コンテナの中に入る。

ターミナル(~/study/database)
docker exec -it mysql bash

MySQLにログイン。

ターミナル(/)
mysql -u root -p

パスワードを聞かれるので、docker-composeファイルに書いたパスワードを入力。以下のように表示されればOK。

ターミナル(出力結果)
Welcome to the MySQL monitor.
...
mysql>

docker-composeファイルに書いたDBがあるかを確認。

ターミナル(mysql)
SHOW DATABASES;
ターミナル(出力結果)
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sample_db          | <- あった!
| sys                |
+--------------------+

使用するデータベースを指定。

ターミナル(mysql)
USE sample_db;

サンプルテーブルを作成。

ターミナル(mysql)
CREATE TABLE sample_table(
  id INT AUTO_INCREMENT,
  name VARCHAR(10),
  INDEX(id)
);

いちおう確認。

ターミナル(mysql)
SHOW TABLES;
ターミナル(出力結果)
+--------------------+
| Tables_in_sample_db |
+--------------------+
| sample_table       |
+--------------------+

ダミーデータを登録。AUTO_INCREMENTを設定したセルはNULLでOK。

ターミナル(mysql)
INSERT INTO sample_table VALUES(NULL, 'AAAAA');
INSERT INTO sample_table VALUES(NULL, 'BBBBB');
INSERT INTO sample_table VALUES(NULL, 'CCCCC');

いちおう確認。

ターミナル(mysql)
SELECT * FROM sample_table;
ターミナル(出力結果)
+----+-------+
| id | name  |
+----+-------+
|  1 | AAAAA |
|  2 | BBBBB |
|  3 | CCCCC |
+----+-------+

MySQLから出る。

ターミナル(mysql)
EXIT;

コンテナから出る。

ターミナル(/)
exit

コンテナを削除。

ターミナル(~/study/database)
docker-compose down
ターミナル(出力結果)
Stopping mysql ... done
Removing mysql ... done
Removing network database_default

再度コンテナを作成・起動して、前回のデータが残っていればOK。