0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[init.sql] PostgreSQL+Dockerで初回起動時にSQLファイルを実行する!

Last updated at Posted at 2024-06-11

はじめに

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文を記述します

containers/postgres/init.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サービスの設定を行います

docker-compose.yml

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ファイルを使用することで、データベースのセットアップを自動化し、手動の設定作業を減らすことができます

是非、この記事を参考にして、自分のプロジェクトでも同様の手法を試してみてください!!🐰

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?