Docker Postgres を使用してデータベース ユーザーを作成する

David Mbochi Njonge 2023年6月20日
  1. 新しいプロジェクトを作成する
  2. ユーザーとデータベースの DDL を定義する
  3. イメージの Dockerfile を定義する
  4. イメージを構築する
  5. コンテナを実行する
  6. コンテナに接続
  7. PostgreSQL へのログイン
  8. スクリプト ファイルを使用しないユーザー データベースの作成
  9. まとめ
Docker Postgres を使用してデータベース ユーザーを作成する

アプリケーションを開発するときは、通常、PostgreSQL、MySQL、MongoDB などのデータベース管理システムを使用して、アプリケーションのデータを記録します。

Docker は、これらのアプリケーション データベース管理システムのインスタンスを実行するのに役立ちます。 これにより、コンピューター上に DBMS が必要ないため、時間とコンピューターのストレージを節約できます。

これらの DBMS から作成されたすべてのデータベースには、データベースに対して異なる権限を持つユーザーがいます。 このチュートリアルでは、Docker Postgres を使用してデータベース ユーザーを作成するためのさまざまなアプローチを学習します。

新しいプロジェクトを作成する

このチュートリアルでは、WebStorm IDE を使用しますが、任意の開発環境を自由に使用できます。 WebStorm IDE を開き、File > New > Project を選択して新しいプロジェクトを作成します。

Empty project オプションを選択し、開いたウィンドウで、プロジェクト名を untitled から initdb.d に変更するか、任意の名前を使用します。

ユーザーとデータベースの DDL を定義する

PostgreSQL ベース イメージを使用してカスタム イメージに追加の初期化を追加するには、フォルダー /docker-entrypoint-initdb.d の下に .sql.sql.gz、または *.shを追加する必要があります。.

SQL クエリを作成したいので、拡張子 .sql のファイルを使用してクエリを定義します。 プロジェクトの現在のフォルダーの下に db-config.sql という名前のファイルを作成し、次の SQL 命令をコピーしてファイルに貼り付けます。

CREATE USER doe;
CREATE DATABASE employee_database;
GRANT ALL PRIVILEGES ON DATABASE employee_database TO doe;

db-config.sql は、エントリ ポイントが initdb を呼び出してデフォルトの Postgres ユーザーとデータベースを作成した後に実行されます。

/docker-entrypoint-initdb.d のスクリプトは、データ ディレクトリが空の場合にのみ実行されることに注意してください。 これは、起動時に、これより前に実行されたデータベースは変更されないことを意味します。

イメージの Dockerfile を定義する

現在のフォルダーの下にDockerfileという名前のファイルを作成し、次の手順をコピーしてファイルに貼り付けます。

FROM postgres:15.1-alpine
COPY db-config.sql /docker-entrypoint-initdb.d/

FROM - 以降の手順を使用してカスタム イメージを作成するベース イメージを定義します。 この場合、alpineを使用しました。これは、PostgreSQL の軽量バージョンであるため、ストレージを最適化するのに役立ちます。

COPY - ファイルとフォルダをホストからイメージ ファイル システムにコピーします。 この場合、db-config.sql ファイルを /docker-entrypoint-initdb.d/ フォルダーにコピーしました。

イメージを構築する

キーボードのキーボード ショートカット ALTF12 を使用して新しいターミナル ウィンドウを開き、次のコマンドを使用してタグ postgres-image でイメージをビルドします。

~/WebstormProjects/initdb.d$ docker build --tag postgres-image:latest .

出力:

 => [1/2] FROM docker.io/library/postgres:15.1-alpine@sha256:cc663286e63810373bdfc91a5ed24b772447fb5282d  0.0s
 => CACHED [2/2] COPY db-config.sql /docker-entrypoint-initdb.d/                                          0.0s
 => exporting to image                                                                                    0.4s
 => => exporting layers                                                                                   0.0s
 => => writing image sha256:fd33d80c880452dcb25de1d8f7d6415eeb874039bdab176cc3d3fe1c910ebcbc              0.1s
 => => naming to docker.io/library/postgres-image:latest

コンテナを実行する

同じターミナル ウィンドウを使用して、次のコマンドを使用して postgres-container という名前の PostgreSQL コンテナーを実行します。

~/WebstormProjects/initdb.d$ docker run --name postgres-container -e POSTGRES_PASSWORD=postgres -d postgres-image

出力:

3b8e0f85c2b4ef4b1aa28e2bad169ae796751331580af6fbba251a1c05aa4fca

run コマンドで POSTGRES_PASSWORD という名前の環境変数を使用したことに注意してください。 PostgreSQL を実行している場合、いくつかの環境変数を渡して、データベースやユーザー名などのスーパーユーザーの詳細を提供できます。

POSTGRES_PASSWORD 環境変数は、スーパーユーザーのパスワードを提供する 必須 変数です。 PostgreSQL のデフォルトのパスワードは postgres です。

渡すことができるその他の環境変数は、optional で、これには POSTGRES_USERPOSTGRES_DBPOSTGRES_INITDB_ARGS などが含まれます。

コンテナーをデタッチ モードで実行しているため、db-config.sql ファイルの実行を確認できません。 ただし、このファイルはスーパーユーザーによって裏で実行されます。

コンテナに接続

新しいユーザーとデータベースを使用して PostgreSQL にログインできるように、インタラクティブ シェルを使用してコンテナーに接続する必要があります。 これを実現するには、次のコマンドを使用してコンテナーに接続します。

~/WebstormProjects/initdb.d$ docker exec -it postgres-container bash

出力:

bash-5.1#

PostgreSQL へのログイン

コンテナーのシェルにアクセスしたら、次のコマンドを使用して、ユーザー doe として employee_database にログインします。

bash-5.1# psql -d employee_database -U doe

出力:

psql (15.1)
Type "help" for help.

employee_database=>

スクリプト ファイルを使用しないユーザー データベースの作成

前のセクションでは、DDL を含む SQL を /docker-entrypoint-initdb.d/ に追加して、Docker Postgres でデータベース ユーザーを作成する方法を学びました。

スクリプト ファイルを作成せずにこれを行う簡単な方法があります。 このアプローチでは、前のセクションで説明した環境変数を使用して、新しいユーザーの詳細を定義します。

これらの環境変数は、ENV 命令を使用して Dockerfile に追加され、コンテナーで使用できるようになります。 これを実際に確認するには、Dockerfile の手順を以下の手順に置き換えてください。

FROM postgres:15.1-alpine
ENV POSTGRES_USER=doe
ENV POSTGRES_DB=employee_database

環境変数を追加したら、イメージの構築、コンテナーの実行、コンテナーへの接続、PostgreSQL へのログインから、前のセクションで説明したすべての手順を繰り返します。

すべてのステップで同じコマンドを使用します。 ただし、必ず既存のコンテナーを停止して削除してください。

新しいイメージとコンテナーを作成することもできます。

まとめ

このチュートリアルでは、Docker Postgres でデータベース ユーザーを作成するために使用できる 2つのアプローチを学びました。 最初のアプローチでは、SQL スクリプトを /docker-entrypoint-initdb.d/ に追加してユーザーを作成し、このファイルは initdb の初期化中に実行されました。

2 番目のアプローチでは、Docker Postgres 環境変数を利用して、Dockerfile でユーザーの詳細を定義しました。

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub