DockerのMySQLとPostgreSQLの初期アカウント・データベース作成の違い

Docker 公式イメージを利用すると、MySQL と PostgreSQL どちらも 環境変数を指定するだけでユーザー・パスワード・データベースの自動作成が可能 です。しかし、挙動には違いがある ため、それぞれの仕様を理解しておくことが重要です。


1. MySQL の初期設定

環境変数を指定するだけで自動作成

MySQL の Docker イメージ (mysql:<version>) では、以下の環境変数を指定するだけで ユーザー・データベースが自動作成 されます。

services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypassword
    volumes:
      - mysql-data:/var/lib/mysql

MySQL の挙動

設定変数説明
MYSQL_ROOT_PASSWORDroot ユーザーのパスワードを設定
MYSQL_DATABASE指定したデータベースを自動作成
MYSQL_USER通常ユーザーを作成 (root とは別)
MYSQL_PASSWORDMYSQL_USER のパスワードを設定

MYSQL_DATABASE を指定すると root によって自動作成される
MYSQL_USERMYSQL_PASSWORD を指定すると追加の通常ユーザーが作成される
root ユーザーは常に存在し、MYSQL_ROOT_PASSWORD が必須


2. PostgreSQL の初期設定

MySQLと同じように環境変数で自動作成が可能

PostgreSQL の Docker イメージ (postgres:<version>) も、以下の環境変数を指定することで ユーザー・データベースが自動作成 されます。

services:
  postgresql:
    image: postgres:17-alpine
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
      POSTGRES_DB: mydatabase
    volumes:
      - postgres-data:/var/lib/postgresql/data

PostgreSQL の挙動

設定変数説明
POSTGRES_USERスーパーユーザーとして作成されるroot の代わり)
POSTGRES_PASSWORDPOSTGRES_USER のパスワード
POSTGRES_DB指定したデータベースを POSTGRES_USER の所有で作成

MySQLの root に相当するのは postgres ユーザー
POSTGRES_USER を指定すると、管理者が postgres ではなくなる(後述)
追加ユーザーは initdb.d に SQL を用意しないと作成されない


3. MySQL と PostgreSQL の違い

項目MySQLPostgreSQL
管理ユーザーroot(固定)postgres(変更可能)
初期パスワード変数MYSQL_ROOT_PASSWORDPOSTGRES_PASSWORD
データベースの自動作成MYSQL_DATABASEPOSTGRES_DB
通常ユーザーの自動作成MYSQL_USER + MYSQL_PASSWORDPOSTGRES_USER + POSTGRES_PASSWORD
追加ユーザーの作成環境変数で可能initdb.d に SQL を置く必要あり

4. PostgreSQL の POSTGRES_USER の注意点

POSTGRES_USERpostgres にするかどうか

MySQL と違い、POSTGRES_USER を変更すると管理者 (postgres) が POSTGRES_USER に置き換わる 仕様があります。

例:POSTGRES_USER=myuser にした場合

  • postgres ユーザーが作成されず、myuser がスーパーユーザーになる
  • 既存のスクリプトが postgres ユーザーを前提にしていると動かなくなる可能性がある

🚀 管理者を postgres にしたいなら、POSTGRES_USER=postgres にするのが無難!


5. PostgreSQL で追加ユーザーを作成する方法

PostgreSQL では POSTGRES_USER 以外の追加ユーザーを作る場合、initdb.d に SQL スクリプトを用意します。

./docker/postgresql/initdb.d/init.sql

CREATE USER appuser WITH PASSWORD 'apppassword';
CREATE DATABASE appdb;
GRANT ALL PRIVILEGES ON DATABASE appdb TO appuser;

これを docker-compose.yml でマウントすると、コンテナ起動時に自動実行 されます。


6. まとめ

MySQL と PostgreSQL はどちらも環境変数で「ユーザー・パスワード・DBの自動作成」が可能
PostgreSQL の POSTGRES_USERroot のようなものだが、変更すると管理者が変わるので注意
追加のユーザーやデータベースは initdb.d/init.sql を使えば自動作成できる
管理者を postgres のままにしたいなら POSTGRES_USER=postgres にする!

💡 MySQL と PostgreSQL の初期設定の違いを理解して、適切にコンテナをセットアップしよう! 🚀

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です