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

推薦する

Kafka と Nginx の統合例

背景nginx-kafka-module は、Kafka を nginx に統合して、Web プロジ...

MySQL ユーザー権限管理の実装

1. MySQL の権限の概要MySQL には、権限を制御する 4 つのテーブルがあります。user...

Zabbix による SQL Server の監視プロセスの詳細な説明

Zabbix による SQL Server の監視を見てみましょう。まずfreetdsをダウンロード...

MySQL で 1 つのテーブルのフィールドを使用して別のテーブルのフィールドを更新する方法

1. 1列を変更する 学生の更新、都市c s.city_name = c.name を設定します こ...

Dockerコンテナイメージからコードを復元する手順

コードが失われ、コンテナ内で実行されているイメージから必要なコードを回復する必要がある場合があります...

CocosCreator 入門チュートリアル: TS で初めてのゲームを作る

目次前提TypeScript と JavaScriptコードエディタの選択TypeScriptを学ぶ...

JavaScriptの基礎を学ぶ

目次1. JavaScriptを記述する場所2. JavaScriptでよく使われる入力文と出力文1...

jsonファイルの書き方の詳細説明

目次JSONとはなぜこの技術なのでしょうか? JSONの使い方- データ形式- メモ- JSには2つ...

Windows での Apache+Tomcat7 負荷分散構成方法の詳細な説明

準備Windows Server 2008 R2 Enterprise (2.40GH、8GB、64...

JavaScript の document.activeELement フォーカス要素の紹介

目次1. デフォルトの焦点はボディにあります2. テキストボックスのフォーカスを手動で取得する3. ...

MySQLの外部ネットワークアクセス権を開く方法

以下のように表示されます。主に認証コマンドを実行します: 2つの方法1. 任意のホストがユーザー b...

より人気がありクリエイティブなダーク背景のウェブデザインの例

暗い背景スタイルのページ デザインは非常に人気があり、シックでエレガント、そして非常にクリエイティブ...

シンプルな時計を実装するJavaScript

この記事では、JavaScriptでシンプルな時計を実装するための具体的なコードを参考までに紹介しま...

innerHTML を理解する

<br />関連記事: innerHTML HTML DOM insertRow() メ...

Mysql の使用法の概要

導入EXISTS は、サブクエリが少なくとも 1 行のデータを返すかどうかを確認するために使用されま...