Docker-ComposeでAPI用のMySQLを用意する

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で停止とコンテナ削除

コメントを残す

メールアドレスが公開されることはありません。

ABOUT US
little
15年以上プログラマーをしているエンジニアです。Kotlin, Java, Python, C++を使用したServerSideの開発に携わってきました。とりあえずやってみるスタイルで記事を更新していきます。