1. 概要

このチュートリアルでは、PostgreSQLDockerとともにインストールする方法を学習します。 通常、パブリックDockerイメージを使用してDockerコンテナを実行します。 同様に、PostgreSQLデータベースサーバーの事前構成されたDockerイメージをDockerHubからプルできます。 ここでは、PostgreSQLをDockerにインストール、構成、実行する方法についても説明します。

まず、 PostgreSQL Public Image を使用して、PostgreSQLデータベースでDockerコンテナを実行します。 後で、カスタマイズされたDockerfileを作成して、PostgreSQLサーバーをDockerコンテナーにインストールします。 また、Dockerコンテナを使用してデータベースをバックアップおよび復元する方法についても学習します。

PostgreSQLデータベースでDockerコンテナを実行する方法を詳しく見ていきましょう。

2. PostgreSQLデータベースを理解する

PostgreSQLデータベースのDockerコンテナを実行する前に、まずPostgreSQLデータベースについて理解しましょう。 PostgreSQLはMySQLに似たオープンソースのRDMSです。 これはオブジェクト指向データベースですが、構造化データと非構造化データの両方を処理できます。

PostgreSQLデータベースエンジンは、Windows、Mac OS X、Linuxなどのさまざまなプラットフォームで実行されます。 また、複雑なデータベースワークロードを格納およびスケーリングするための高度なデータ型とパフォーマンス最適化機能も提供します。

3. パブリックイメージを使用してPostgreSQLをセットアップする

Dockerを使用してPostgreSQLを実行するには、最初に DockerHubで利用可能なpostgresパブリックイメージをプルする必要があります。

$ docker pull postgres
Using default tag: latest
latest: Pulling from library/postgres
1fe172e4850f: Pull complete 
...
c08147da7b54: Pull complete 
Digest: sha256:ab0be6280ada8549f45e6662ab4f00b7f601886fcd55c5976565d4636d87c8b2
Status: Downloaded newer image for postgres:latest
docker.io/library/postgres:latest

上記のコマンドでは、postgresの最新の安定したイメージをプルしました。 以下のコマンドを使用して、postgresイメージの特定のバージョンをプルすることもできます。

$ docker pull postgres:14.2
14.2: Pulling from library/postgres
Digest: sha256:e3d8179786b8f16d066b313f381484a92efb175d1ce8355dc180fee1d5fa70ec
Status: Downloaded newer image for postgres:14.2
docker.io/library/postgres:14.2

次に、次のコマンドを使用して、 postgres:latestイメージを使用してDockerコンテナーを実行します。

$ docker run -itd -e POSTGRES_USER=baeldung -e POSTGRES_PASSWORD=baeldung -p 5432:5432 -v /data:/var/lib/postgresql/data --name postgresql postgres
5aeda2b20a708296d22db4451d0ca57e8d23acbfe337be0dc9b526a33b302cf5

上記のコマンドは、環境変数POSTGRES_USERおよびPOSTGRES_PASSWORDを使用して、PostgreSQLデータベースのユーザー名およびパスワードを設定します。 デフォルトでは、PostgreSQLデータベースは5432ポートで実行されます。 docker run コマンドで“-p 5432:5432” を使用して、ホストの5432ポートを公開しました。 データをバックアップするために、 / var / lib / postgresql /dataディレクトリをpostgresコンテナのホストマシンの/dataディレクトリにマウントしました。 。

psql は、PostgreSQLデータベースにインタラクティブにアクセスするために使用されるコマンドラインユーティリティです。 次に、psqlを使用してデータベースに接続しましょう。

$ PGPASSWORD=baeldung psql -U baeldung 

すべてのデータベースからリストを取得するには、コマンド \lを使用します。

$ PGPASSWORD=baeldung psql -U baeldung -c '\l' 
                                    List of databases
    Name    |   Owner    | Encoding |  Collate   |   Ctype    |     Access privileges     
------------+------------+----------+------------+------------+---------------------------
 baeldung   | baeldung   | UTF8     | en_US.utf8 | en_US.utf8 | 
 postgres   | baeldung   | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0  | baeldung   | UTF8     | en_US.utf8 | en_US.utf8 | =c/baeldung            +
            |            |          |            |            | baeldung=CTc/baeldung
 template1  | baeldung   | UTF8     | en_US.utf8 | en_US.utf8 | =c/baeldung            +
            |            |          |            |            | baeldung=CTc/baeldung
(4 rows)

上記の出力では、PostgreSQLサーバーに存在するすべてのデータベースの詳細を取得できます。

4. カスタマイズされたDockerfileを使用してPostgreSQLをセットアップする

カスタマイズされたDockerfileを作成して、PostgreSQLデータベースサーバーをセットアップすることもできます。 ここでは、CentOSをベースイメージとして使用してPostgresをインストールするために必要なすべてのコマンドを含むDockerfileを作成します。

FROM centos:7
COPY startUpScript.sh /
RUN yum install -y epel-release maven wget \
&& yum clean all \
&& yum install -y  https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm \
&& yum install -y postgresql11-server postgresql11-contrib \
&& chown root /startUpScript.sh \
&& chgrp root /startUpScript.sh \
&& chmod 777 /startUpScript.sh
CMD ["/bin/bash","-c","/startUpScript.sh && tail -f /dev/null"]

上記のDockerfileでは、 startUpScript.sh を使用して、インストールが成功したときにPostgreSQLデータベースサーバーを起動しました。 startUpScript.shファイルを調べてみましょう。

#!/bin/bash
su -l postgres -c /usr/pgsql-11/bin/initdb
su -l postgres -c "/usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/data -l /tmp/pg_logfile start"
createdb -U postgres baeldung

startUpScript.sh では、最初にPostgreSQLデータベースを初期化し、次にダミーデータベースbaeldungを作成しました。

5. DockerにpgAdminをインストールする

これまでのところ、PostgreSQLサーバーはアクティブで、5432ポートで実行されています。 次に、PostgreSQLデータベースとサービスの管理に使用されるWebベースのユーザーインターフェイスツールであるpgAdminをインストールします。pgAdminを使用してPostgreSQLデータベースでSQLクエリを実行できます。

UIからすべてのクエリを実行するには、pgAdminを使用できます。そのためには、次のコマンドを使用してpgAdminイメージをプルする必要があります。

$ docker pull dpage/pgadmin4:latest
latest: Pulling from dpage/pgadmin4
40e059520d19: Pull complete 
...
6d23acfae6ef: Pull complete 
Digest: sha256:f820e5579857a7210599f998c818777a2f6f39172b50fbeb2faaa1a70413e9ac
Status: Downloaded newer image for dpage/pgadmin4:latest
docker.io/dpage/pgadmin4:latest

実例を示すために、以下のコマンドを使用してコンテナーを実行してみましょう。

$ docker run --name pgadmin-baeldung -p 5051:80 -e "PGADMIN_DEFAULT_EMAIL=user@baeldung.com" -e "PGADMIN_DEFAULT_PASSWORD=baeldung" -d dpage/pgadmin4

上記のコマンドでは、PGADMIN_DEFAULT_EMAILPGADMIN_DEFAULT_PASSWORDを環境変数としてpgadmin-baeldungコンテナに提供しました。

pgAdminGUIを使用してPostgreSQLデータベースに簡単にアクセスできます。 データベースにアクセスするには、pgAdminを使用してPostgresサーバーへの接続を設定する必要があります。 これを行うには、pgAdminにログインします。

6. データのバックアップと復元

このセクションでは、Dockerコマンドを使用してPostgreSQLでデータをバックアップおよび復元する方法を学習します。

まず、データをバックアップするために、ダミーデータベースbaeldungとテーブルbaeldungauthor。を作成しましょう。

$ createdb -h localhost -p 5432 -U baeldung baeldung

テーブルを作成するコマンドは次のとおりです。

CREATE TABLE baeldungauthor (
   AUTHOR_ID INT PRIMARY KEY     NOT NULL,
   AUTHOR_NAME           TEXT    NOT NULL,
   AUTHOR_AGE            INT     NOT NULL,
   AUTHOR_LEVEL        INT     NOT NULL
);

データベースに作成されたテーブルをリストアップしましょう。

psql -U baeldung -d baeldung -c "\d"
              List of relations
 Schema |      Name      | Type  |   Owner    
--------+----------------+-------+------------
 public | baedlungauthor | table | baeldung
(1 row)

次に、以下のコマンドを使用して、テーブルbaeldungauthorのスキーマの詳細を取得します。

psql -U baeldung -d baeldung -c "\d baedlungauthor"
              Table "public.baedlungauthor"
    Column    |  Type   | Collation | Nullable | Default 
--------------+---------+-----------+----------+---------
 author_id    | integer |           | not null | 
 author_name  | text    |           | not null | 
 author_age   | integer |           | not null | 
 author_level | integer |           | not null | 
Indexes:
    "baedlungauthor_pkey" PRIMARY KEY, btree (author_id)

これまで、データベースとテーブルを作成してきました。 Dockerコンテナのデータベースをバックアップするコマンドを調べてみましょう。

$ docker exec -t postgresql pg_dumpall -c -U baeldung > dump.sql

ここで、上記のコマンドでは、pg_dumpallを使用してbaeldungデータベースをバックアップしました。 これは、データベースをバックアップするための標準のPostgreSQLツールです。 コマンドでは、特権にアクセスするためのDBサーバーのユーザー名を指定しました。

次に、データベースを復元するコマンドを確認してみましょう。

$ cat dump.sql | docker exec -i postgresql psql -U baeldung

ここでは、簡単に言うと、 psql コマンドを使用して、baeldungデータベースのすべてのテーブルを復元しました。

7. 結論

この記事では、Dockerコンテナを使用してPostgreSQLデータベースをインストールする方法を学びました。 PostgresのDockerコンテナをプル、セットアップ、実行するための各ステップを検討しました。 さらに、PostgreSQLデータベースサーバーにアクセスするための両方の方法を検討しました。 まず、Dockerコンテナで実行されているPostgreSQLデータベースサーバーにアクセスするためにpgAdminを調べました。 その後、 psql を使用して、PostgreSQLのデータベースに対してクエリを実行しました。

要約すると、Docker Hubに存在するPostgresパブリックイメージを使用して、PostgreSQLデータベースでDockerコンテナを実行しました。 また、DockerコンテナにPostgreSQLサーバーをインストールするためにカスタマイズされたDockerfileを作成しました。

最後に、Dockerコンテナを使用してPostgreSQLデータベース内のデータのバックアップと復元を調べました。