LoginSignup
1
1

More than 1 year has passed since last update.

ローカル開発環境でDBが必要なときに使う手法(私的)

Posted at

※ Docker Composeによる開発が前提になっています。
※ ここではMySQLを利用しています。

はじめに

データベースだけ別でホストに用意して、ポートを開いて繋げる方法でも悪くはないのです。
しかし環境的なまとまりが悪いので、普段はDocker Composeを利用しています。

探しても意外と欲しい情報が見つからず、かなり調べながら作った経緯がありますので、備忘録を兼ねて共有しておきます。

手順

1. 任意の docker-compose.yml を用意する。

docker-compose.yml
version: "3"
services:
  my_app:
    build: ./app
    ports:
      - 5000:5000
    volumes:
      - ./app:/app
    tty: true

この段階では、データベース以外の環境は揃っているものとします。

2. docker-compose.yml にデータベース用の設定を追記する。

ここでは、MySQLとphpMyAdminを入れています。
MySQLの準備ができる前にphpMyAdminが立ち上がると正常に動作しないため、healthcheckをさせています。

docker-compose.yml
version: "3"
services:
  app:
    build: ./app
    depends_on:
        - mysql
    ports:
      - 5000:5000
    volumes:
      - ./app:/app
    tty: true

  mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_USER=user
      - MYSQL_PASSWORD=password
      - TZ=Asia/Tokyo
    volumes:
      - ./db/data:/var/lib/mysql
      - ./db/initdb.d:/docker-entrypoint-initdb.d
    ports:
      - 3306
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    healthcheck:
      test: /etc/init.d/mysql status
      start_period: 10s
      interval: 1s
      retries: 120

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:5.1.1
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=root
      - PMA_PASSWORD=password
    ports:
      - 8080:80
    volumes:
      - ./db/phpmyadmin/sessions:/sessions

3. ./db/initdb.d/1_init.sql を作成し、初回に実行したいSQL文を記述する。

1_init.sql
CREATE DATABASE `sample_db`;
USE `sample_db`;

CREATE TABLE `sample_data` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `value` varchar(600) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `sample_data` (`id`, `name`, `value`) VALUES
(1, "name_1", "This is value1."),
(2, "名前2", "これは名前2です。");

4. docker-compose up する。

データベースの初期化にはいくらか時間がかかるため、 http://localhost:8080 でphpMyAdminが表示されるまで少し待ちます。
あまりに遅い場合、 1_init.sql に構文エラーがある可能性があります。
その場合、一旦 down して再度 up することで、phpMyAdminにアクセスできる場合があります。

すべての準備が完了したら、下記の接続情報を利用できます。

.env
host="mysql"
port=3306
user="user"
password="password"
db="sample_db"

2021-10-16_06h28_30.jpg

参考

その他多数

1
1
0

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
1
1