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 の解析

推薦する

MySQL シリーズ 8 MySQL サーバー変数

チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...

ウェブデザインでは、まずウェブサイトの包括的なイメージの位置付けが必要です。

⑴ 内容によって形式が決まります。まず内容を充実させ、次にブロックに分割し、トーンを決め、最後に細部...

CSSレイアウトにおけるフローティング問題に対する4つの解決策の詳細な説明

1. 原因:サブボックスをフロートに設定した後の効果: 青いボックスをフロートに設定すると、標準のド...

Centos8.2 クラウド サーバー環境に Tomcat8.5 をインストールするための詳細なチュートリアル

Tomcatをインストールする前に、まずJDK環境をインストールしてくださいLinux サーバー上で...

ドッカー専用倉庫港湾建設プロセス

1. 準備1.1 港ダウンロードハーバーダウンロードアドレス:リンクリンクの説明を追加し、必要なバー...

太陽系の惑星のアニメーション効果を実現するHTML+CSS3コード

太陽系の 8 つの惑星(衛星を除く)のアニメーションを作成します。すべての惑星は太陽の周りを回ってい...

JavaScript Sandboxについての簡単な説明

序文:サンドボックスといえば、私たちの頭には反射的に上の写真が思い浮かび、すぐに興味がわいてくるかも...

Vueプロジェクトをパッケージ化してリリースする手順

目次1. 開発環境から本番環境への移行2. 統一されたリクエストパスを設定する3. パッケージ化コマ...

JS はデータ URL をどのように理解するのでしょうか?

目次概要データ URL の使用を開始するデータURL構文複数言語の文字列のBase64エンコードとデ...

Tomcat で JNDI データ ソースを構成する 3 つの方法

これまでの仕事では、開発サーバーは一般的にTomcatでした。データソースは、多くの場合、appli...

VMware Workstation 14 Pro に Win10 システムをインストールする

この記事では、VMware Workstation 14 Proにシステムをインストールする方法を紹...

nginx で Vue プロジェクトをデプロイする方法

今日は nginx サーバーを使用するのですが、vue プロジェクトをサーバーにデプロイする必要もあ...

Vue axios インターセプターは、繰り返しリクエストのキャンセルによく使用されます。

導入前回の記事では、axios のシンプルなカプセル化と、axios インターセプターの適用シナリオ...

MacでDockerがホストマシンにpingできない問題を解決する

解決Docker for Macに付属するLinux仮想マシン(軽量ですが、ソケットファイルを使用し...

Ubuntu で FTP サーバーを構築する方法の詳細な説明 (成功保証)

1. 今日の午後、コースの要件により、Ubuntu で FTP サーバーを設定する実験を行う必要が...