Docker が PostgreSQL を起動するときに複数のデータベースを作成するためのソリューション

Docker が PostgreSQL を起動するときに複数のデータベースを作成するためのソリューション

1 はじめに

「DockerでPostgreSQLを起動する方法といくつかの接続ツールのおすすめ」の記事で、 Docker経由でPostgreSQL起動する方法を紹介しましたが、データベースは1つしかありません。同じDockerコンテナ上に複数のデータベースを作成したい場合はどうすればよいでしょうか。

2 2つの解決策

1 つの解決策は、 shell/sqlスクリプトを/docker-entrypoint-initdb.d/ディレクトリに配置し、コンテナーの起動時に自動的に作成することです。もう 1 つの解決策は、 shellスクリプトを使用して作成を指定することですが、基本的には同じです。ここで紹介するのは最初のものだけです。

shellスクリプトまたはsqlスクリプトを指定されたディレクトリに配置すると、自動的に実行されます。どちらのスクリプトでもかまいません。

以下はshellスクリプトの例です。

#!/bin/bash

セット-e
セット-u

関数create_user_and_database() {
	ローカルデータベース=$1
	echo " ユーザーとデータベース '$database' を作成しています"
	psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
	    ユーザー $database を作成します。
	    データベースを作成します $database;
	    データベース $database のすべての権限を $database に付与します。
EOSQL
}

if [ -n "$POSTGRES_MULTIPLE_DATABASES" ]; then
	echo "複数のデータベースの作成が要求されました: $POSTGRES_MULTIPLE_DATABASES"
	$(echo $POSTGRES_MULTIPLE_DATABASES | tr ',' ' '); のdbに対して
		ユーザーとデータベースの作成 $db
	終わり
	echo "複数のデータベースが作成されました"
フィ

以下はsqlスクリプトの例です。

ユーザー pkslowuser を作成します。

データベース logdata を作成します。
データベース logdata のすべての権限を pkslowuser に付与します。

データベース orderdata を作成します。
データベース orderdata のすべての権限を pkslowuser に付与します。

データベースuserdataを作成します。
データベース userdata のすべての権限を pkslowuser に付与します。

3 パッケージングと起動

Dockerfileを準備し、 shell/sqlスクリプト ファイルをイメージに配置します。

postgres:10 から
src/main/resources/create-multiple-postgresql-databases.sh /docker-entrypoint-initdb.d/ をコピーします。
src/main/resources/create-multiple-postgresql-databases.sql /docker-entrypoint-initdb.d/ をコピーします。

次のように開始します。

docker run -itd \
    --name pkslow-postgres \
    -e POSTGRES_MULTIPLE_DATABASES=db1,db2 \
    -e POSTGRES_USER=pkslow \
    -e POSTGRES_PASSWORD=pkslow \
    -p 5432:5432 \
    pkslow/postgresql-複数データベース:1.0-SNAPSHOT

起動が成功すると、次のデータベースが作成されます。

db1、db2、
ログデータ、注文データ、ユーザーデータ

4 結論

これは開発およびテスト段階で使用されるソリューションです。実際、データベースをコンテナに配置するのは良い選択ではありません。

コードを確認してください: https://github.com/LarryDpk/pkslow-samples

以上で、Docker で PostgreSQL を起動する際に複数のデータベースを作成する方法についての記事は終了です。Docker で PostgreSQL を起動する方法の詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker デプロイメント postgresql データベースについて
  • Docker で PostgreSQL を実行し、いくつかの接続ツールを推奨する
  • ローカル Docker に Postgres 12 + pgadmin をインストールする方法 (Apple M1 をサポート)
  • Docker環境でPostgreSQLをアップグレードする詳細な手順
  • docker で PostgreSQL データベースをインストールして永続化する方法
  • dockerでPostgreSQLを実行する方法
  • docker 環境でのデータベース バックアップ (postgresql、mysql) のサンプル コード
  • docker をデプロイして postgres データベースにアクセスする方法

<<:  HTML4.0 要素のデフォルトスタイルの配置

>>:  MySQL binlog の解析

推薦する

Linux および CentOS (サーバー) に zip および unzip コマンド機能をインストールする

Linux に zip 解凍機能をインストールする通常、 zip コマンドは Linux サーバーに...

ブラインドの特殊効果を実現するネイティブJS

この記事では、ネイティブ JS で実装されたブラインドの特殊効果を紹介します。効果は次のとおりです。...

MySQL DEFINER の使用方法の詳細な説明

目次序文: 1.DEFINERの簡単な紹介2. いくつかの注意点要約:序文: MySQL データベー...

マルチポートおよびマルチドメイン名アクセスのNginx構成の実装

サーバーに複数のサイトを展開するには、異なるサイトにアクセスするために複数のポートを開く必要がありま...

よく使われるCSSカプセル化方法の概要

1. pc-reset PCスタイルの初期化 /* 正規化.css */ html{ 行の高さ: 1...

MySQL 基本チュートリアル パート 1 MySQL5.7.18 のインストールと接続チュートリアル

この記事から、MySQL を紹介し学習するための新しい一連の記事がスタートします。なぜ MySQL ...

MySQL プロジェクトでトランザクション分離レベルを選択する方法

導入コンテンツから始めましょう。誰もが次のような面接のシナリオに遭遇したことがあると思います。インタ...

uniappのグローバル変数実装の詳細な説明

序文この記事では、uniapp グローバル変数の実装方法をいくつかまとめています。詳細な知識は、uV...

Vueでショッピングカートのすべての機能を実装する簡単な方法

主な機能は次のとおりです。製品情報を追加する製品情報を変更する単一の製品を削除する複数の製品を削除す...

テーブルリストを破棄するには、標準のdl、dt、ddタグを使用します。

現在、ますます多くのフロントエンド開発者が、元のテーブル レイアウトを xHTML + CSS に置...

Docker-compose チュートリアルのインストールとクイックスタート

目次1. Compose の紹介2. ComposeとDockerの互換性3. Dockerをインス...

CSS で QR コードスキャンボックスを実装するためのサンプルコード

カメラを開くと通常はスキャンボックスが表示されますが、静的なQRコードではフォーカスを合わせたりスキ...

単一/複数行テキストを含む div を垂直方向に中央揃えする N 通りの方法 (高さ不明/高さ固定)

この問題について話すとき、垂直方向の中央揃えを設定するための vertical-align 属性が ...

jQueryのチェーンプログラミングスタイルの詳細な例

チェーンプログラミングの実装原理jQuery を使用すると、開発者は常にドット構文を使用して独自のメ...

航空機戦争ゲームを実装するためのネイティブJS

この記事の例では、参考のために航空機戦争ゲームを実装するためのJSの具体的なコードを共有しています。...