organicveggie.postgres_docker
Ansibleロール: Docker上のPostgreSQL
Ansibleのロールを使って、PostgreSQLのDockerコンテナをセットアップして実行するためのものです。
目次
必要条件
Dockerが必要です。Dockerのインストールには、geerlingguy.docker
のロールを推奨します。
ロール変数
postgres_docker_name
: Dockerコンテナの名前。postgres_docker_admin_password
: スーパーユーザーのパスワード。postgres_docker_initscripts
: PostgreSQL Dockerコンテナにコピーするオプションの初期化スクリプト。ファイル形式は.sql
、sql.gz
、または.sh
です。ターゲットシステムにあらかじめ存在している必要があります。コンテナが
initdb
を呼び出してデフォルトのpostgres
ユーザーとデータベースを作成した後、*.sql
ファイルが実行され、実行可能な*.sh
スクリプトが実行され、非実行可能な*.sh
スクリプトがサービスを開始する前に取得されます。スクリプトは、データディレクトリが空の状態でコンテナを起動した場合のみ実行されます。事前に存在するデータベースは、コンテナの起動時には変更されません。一般的な問題は、スクリプトの1つが失敗し、オーケストレーターがすでに初期化されたデータディレクトリでコンテナを再起動すると、スクリプトが続行されないことです。初期化ファイルは、現在のロケールによって定義された名前順に実行されます。デフォルトは
en_US.utf8
です。すべての*.sql
ファイルは、デフォルトでpostgres
スーパーユーザーであるPOSTGRES_USER
によって実行されます。*.sh
スクリプト内で実行されるpsql
コマンドは、--username "$POSTGRES_USER"
フラグを使用してPOSTGRES_USER
として実行することを推奨します。このユーザーは、コンテナ内でUnixソケット接続のためのtrust
認証があるため、パスワードなしで接続できます。postgres_docker_use_volumes
: Dockerボリュームを使用するかどうか。Trueにすると、次の2つの専用Dockerボリュームが作成されます:/etc/postgresql
にマウントされる設定ファイル用の1つ。/var/lib/postgresql/data
にマウントされるデータファイル用の1つ。
postgres_docker_memory
: PostgreSQLコンテナに割り当てるメモリの量。postgres_docker_cpu
: PostgreSQLコンテナに割り当てるvCPUの数。postgres_docker_network_create
: PostgreSQLコンテナ用のDockerネットワークを作成するかどうか。Trueにすると、このコンテナ専用のネットワークが作成されます。Falseの場合はネットワークを作成せず、postgres_docker_network_name
で指定されたネットワークに自動的に参加します。postgres_docker_network_name
: 参加するDockerネットワークの名前。必須。postgres_docker_network_create
が偽の場合は特に便利です。postgres_docker_image
: 使用するDockerイメージの名前とラベル。postgres_docker_available_externally
: Traefik Proxyでの有効化を行うかどうか。
完全なリストはdefaults/main.ymlを参照してください。
依存関係
なし。
サンプルプレイブック
ネットワークを作成
- hosts: all
vars:
postgres_docker_network_create: true
postgres_docker_memory: "2GB"
postgres_docker_cpu: "2"
roles:
- geerlingguy.docker
- organicveggie.postgres_docker
バインドマウントを使用したカスタム名
- hosts: all
vars:
postgres_docker_name: "pgsql-example"
postgres_docker_use_volumes: false
roles:
- geerlingguy.docker
- organicveggie.postgres_docker
初期化スクリプト
新しいユーザーとデータベースをセットアップするシェルスクリプト: 01_create_example.sh
#!/bin/sh
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES" --dbname "molecule" <<-EOSQL
CREATE USER example;
CREATE DATABASE exampledb;
GRANT ALL PRIVILEGES ON DATABASE exampledb TO example;
CREATE TABLE test (
id int CONSTRAINT id_pk PRIMARY KEY
);
INSERT INTO test VALUES (42), (54);
EOSQL
プレイブック:
- hosts: all
roles:
- geerlingguy.docker
- hosts: all
vars:
postgres_docker_initscripts:
- "/tmp/01_create_example.sh"
tasks:
- name: 初期化スクリプトをコピー
ansible.builtin.copy:
src: "files/01_create_example.sh"
dest: "/tmp"
mode: "755"
roles:
- organicveggie.postgres_docker
ライセンス
著者情報
Role to install PostgreSQL Docker container on Linux.
ansible-galaxy install organicveggie.postgres_docker