はじめに
PostgreSQLをDockerコンテナで立ち上げる際に、初期化SQLファイル(init.sql)を実行することで、データベースの作成やユーザーの設定を自動化することができます
本記事では、init.sqlファイルを使用してPostgreSQLコンテナをセットアップする方法を説明します
前提条件
- DockerとDocker Composeがインストールされていること
- 基本的なSQLとDockerの知識があること
手順
1. ディレクトリ構成の準備
まず、プロジェクトのディレクトリ構成を準備します
以下のようなディレクトリ構成にします
project_root/
├── containers/
│ └── postgres/
│ └── init.sql
├── Dockerfile
└── docker-compose.yml
2. init.sqlファイルの作成
次に、init.sqlファイルを作成し、データベースの初期化SQL文を記述します
-- データベースの作成
CREATE DATABASE sotaheavymetal21_db;
-- ユーザーの作成
CREATE USER sotaheavymetal21 WITH PASSWORD 'password';
-- ユーザーに対するデータベースの全権限付与
GRANT ALL PRIVILEGES ON DATABASE sotaheavymetal21_db TO sotaheavymetal21;
3. Dockerfileの作成
次に、PostgreSQLイメージをベースにしたDockerfileを作成します
init.sqlファイルをコンテナの適切なディレクトリにコピーします
# Dockerfile
FROM postgres:15.2
# init.sqlファイルをコンテナの/docker-entrypoint-initdb.dにコピー
COPY containers/postgres/init.sql /docker-entrypoint-initdb.d/
docker-entrypoint-initdb.dとは
PostgreSQL Dockerイメージに特有のディレクトリであり、コンテナの初回起動時に初期化スクリプトを自動的に実行するためのディレクトリです
このディレクトリに配置されたSQLスクリプトやシェルスクリプトは、PostgreSQLコンテナが初めて起動するときに自動的に実行されます
4. docker-compose.ymlの作成
次に、docker-compose.ymlファイルを作成し、PostgreSQLサービスの設定を行います
version: '3.8'
services:
db:
build:
context: .
dockerfile: Dockerfile
environment:
POSTGRES_DB: usagi_db
POSTGRES_USER: postgres
POSTGRES_PASSWORD: posgres
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
5. コンテナのビルドと起動
すべてのファイルが準備できたら、Docker Composeを使用してコンテナをビルドし、起動します
docker-compose up --build
これで、PostgreSQLコンテナが立ち上がり、init.sqlファイルが実行され、データベースの初期化が行われます
6. 動作確認
コンテナが正常に起動したら、psqlコマンドやpgAdminなどのツールを使用してデータベースに接続し、正しく初期化されているかを確認します
# PostgreSQLコンテナに接続
docker exec -it <コンテナID> psql -U postgres -d usagi_db
# データベースの確認
\l
# ユーザーの確認
\du
まとめ
PostgreSQLをDockerコンテナで立ち上げる際に、初期化SQLファイルを実行する方法について説明しました!
init.sqlファイルを使用することで、データベースのセットアップを自動化し、手動の設定作業を減らすことができます
是非、この記事を参考にして、自分のプロジェクトでも同様の手法を試してみてください!!🐰