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 ユーザーのパスワード |
必須 |
セキュリティ上、必ず設定が必要 |
|
管理者ユーザー名 |
任意 |
デフォルトは postgres |
|
初期作成するデータベース名 |
任意 |
アプリ用DBを自動作成 |
|
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 コマンド:
コマンド |
説明 |
|---|---|
|
データベース一覧を表示 |
|
データベースに接続 |
|
テーブル一覧を表示 |
|
ユーザー一覧を表示 |
|
psql を終了 |