PostgreSQLしたい(postgresql

compose.yaml ファイル:

services:
  db:
    image: postgres:latest
    container_name: my-postgres
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres_password}
      POSTGRES_USER: ${POSTGRES_USER:-postgres}
      POSTGRES_DB: ${POSTGRES_DB:-app_db}
    ports:
      - "5432:5432"
    volumes:
      - db_data:/var/lib/postgresql/data
    shm_size: 128mb

  adminer:
    image: adminer:latest
    container_name: my-adminer
    ports:
      - "8080:8080"
    environment:
      - ADMINER_DEFAULT_SERVER=db
    depends_on:
      - db

volumes:
  db_data:

PostgreSQLをDockerで起動します。 認証情報は環境変数で設定し、データはnamed volumeで永続化しています。 環境変数は.envで変更します。 上記サンプルでは、デフォルト値を指定しているため、.envファイルがなくても動作します。

Adminerはマルチプラットフォーム対応のデータベース管理ツールで、ブラウザから簡単にPostgreSQLを管理できます。

起動・停止コマンドは以下の通りです。

$ docker compose up -d
$ docker compose down

動作確認したい

$ docker compose exec db psql -U postgres
psql (16.4 (Debian 16.4-1.pgdg120+1))
Type "help" for help.

postgres=#

コンテナー内のPostgreSQLに接続できます。

動作確認用SQL

\l
CREATE DATABASE test_db;
\c test_db
CREATE TABLE hello (id INT PRIMARY KEY, message TEXT);
INSERT INTO hello VALUES (1, 'Hello PostgreSQL!');
SELECT * FROM hello;

環境変数を設定したい

.env ファイルで認証情報を管理することを推奨します:

POSTGRES_PASSWORD=your_password
POSTGRES_USER=your_username
POSTGRES_DB=your_database_name

認証情報は環境変数で変更できます。 .env ファイルに必要な認証情報を記述し、 ビルドコンテキストのルートに配置してください。

Gitリポジトリで管理している場合は、 .env.gitignoreに追加して、コミットできないようにしてください。

PostgreSQLの公式イメージでは、以下の初期設定時の認証情報を設定できます。

環境変数

説明

必須

備考

POSTGRES_PASSWORD

postgres ユーザーのパスワード

必須

セキュリティ上、必ず設定が必要

POSTGRES_USER

管理者ユーザー名

任意

デフォルトは postgres

POSTGRES_DB

初期作成するデータベース名

任意

アプリ用DBを自動作成

POSTGRES_INITDB_ARGS

initdb へのコマンドラインオプション

任意

エンコーディングなどを指定

いったん初期化したコンテナーでは、これらの環境変数を変更しても反映されません。 変更を反映させたい場合は、ボリュームを削除して再起動してください。

注釈

認証情報はcompose.yamlにベタ書きせず、 .envに保存することが推奨されています。

ユーザー・パスワードを変更したい

$ docker compose exec db psql -U postgres
postgres=# ALTER USER postgres WITH PASSWORD 'new_password';
ALTER ROLE
postgres=# \q

PostgreSQLは最初からpostgresユーザーが存在します。 パスワードを変更する場合はALTER USERコマンドを使用します。

データベースを確認したい

Adminerで確認したい

ブラウザで http://localhost:8080 にアクセスするとAdminerが起動します。

システムに PostgreSQL を選択し、サーバー名に db を入力し、 ユーザー名に postgres、パスワードに設定した値を入力してログインできます。

psql で確認したい

$ docker compose exec db psql -U postgres

コンテナー内のpsqlを起動し、コマンドラインでデータベースを直接操作できます。

postgres=# \l
postgres=# \c app_db
postgres=# \dt
postgres=# SELECT * FROM table_name;
postgres=# \q

よく使う psql コマンド:

コマンド

説明

\l

データベース一覧を表示

\c database_name

データベースに接続

\dt

テーブル一覧を表示

\du

ユーザー一覧を表示

\q

psql を終了

リファレンス