tech

テックカテゴリー

【Docker】dockerでmysql DBを複数作成し起動する

Category | infra

Tag | docker-compose / Docker / MySQL

Author | naohito-T

Post | 2023-02-11 / 34,254views

Dockerなど複数DBを立ち上げる方法Tipsです。

MySQL のコンテナにおいては,環境変数MYSQL_DATABASE によって自動でDBを生成できます。
しかし1つのDBしか自動で生成できず、テスト用のDBなどは分けたい場合、DB作成スクリプトを起動時に実行したりするなどで対処していました。
しかしmysqlのimageを見ると起動時にスクリプトを渡すことができ、簡単にDBを2つ作成できたので共有Tipsとして残しておきます。

各構成

実現するための各構成です。

ディレクトリ構成

.
├── docker-compose.yml # コンテナの設定を記述
└── mysql-init         # DB初期化用のSQLを格納するディレクトリ
    └── 01.sql         # コンテナ起動時に実行されるSQL


コンテナ設定

version: '3'

services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_HOST: db
      MYSQL_DATABASE: db
      MYSQL_PORT: 3306
      MYSQL_USER: user
      MYSQL_ROOT_PASSWORD: password
      MYSQL_PASSWORD: password
    volumes:
      - ./mysql-init:/docker-entrypoint-initdb.d
    ports:
      - 3306:3306


0.1sql

CREATE DATABASE IF NOT EXISTS `db_test`;


コードを見ればわかると思いますが、要はホスト側で作成したsqlファイルをDockerへバインドマウントしているだけです。
そうすればdockerの起動時、スクリプトが実行されdbが作成されます。
今回の場合だと環境変数でも設定していますが無事に2つ作成されます。

以上です。

参考

https://onexlab-io.medium.com/docker-compose-mysql-multiple-database-fe640938e06b

Share this article

naohito-T

naohito-T

千葉出身。都内(銀座)での美容師経験があるソフトウェアエンジニア。モデル撮影のために購入したmacを使っていたらPCの仕組みが気になり始め、気づいたらエンジニアに。人生まるごとクリエイティブだと思っている。人の髪をデザインしていた経験をIT業界へ活かせることはないか日々模索中。