このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Docker入門】PostgreSQLコンテナ

ここでは、Docker Composeコマンドを使ったPostgreSQLコンテナの構築例を紹介します。

PostgreSQLとは

まず、はじめにPostgreSQLについて説明しておきます。

 PostgreSQL(ポストグレスキューエル)は、オープンソースのリレーショナルデータベース管理システム(RDBMS)であり、世界中の多くの組織やコミュニティによって広く利用されています。その名前は「Postgres」(Post Ingresの略)に由来し、カリフォルニア大学バークレー校の研究プロジェクトから派生しています。

 PostgreSQLは、高度な機能を提供する堅牢なデータベースシステムとして知られています。ACID準拠のトランザクション処理、複数の同時ユーザーのサポート、複数のプログラミング言語との統合、豊富なデータ型のサポートなど、多くの機能が組み込まれています。

 さらに、PostgreSQLは拡張性にも優れており、大規模なデータベースや高トラフィックなアプリケーションにも対応できます。また、高度なセキュリティ機能やバックアップ/リストア機能も提供しており、信頼性の高いデータ管理を実現します。

 PostgreSQLはオープンソースであり、コミュニティによって開発・メンテナンスされています。そのため、新機能の追加やバグ修正などのアップデートが定期的にリリースされ、常に最新の技術に対応しています。

 PostgreSQLは、ウェブアプリケーション、モバイルアプリケーション、データウェアハウス、企業システムなど、さまざまな用途に広く利用されています。その柔軟性と信頼性により、多くの開発者や組織にとって選択肢の一つとなっています。

URL:https://www.postgresql.org/

PostgreSQLコンテナの作成

「compose.yaml」を作成して、PostgreSQLコンテナを作成します。

不要なDockerオブジェクトの削除

まず、不要なDockerオブジェクトをすべて削除しておきます。

以下のコマンドを実行します。

・「docker system prune -a」コマンドを実行します。

Are you sure you want to continue? [y/N] の質問には「y」と入力します。

PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y
Deleted Containers:
(略)

・「docker system prune -a」コマンドで削除されなかったDockerオブジェクトは、個別に削除しておきます。

環境によって削除されずに残っているDockerオブジェクトは異なります。

compose.yaml の作成

ディレクトリの作成と移動

Docker Composeでコンテナを作成するには、「compose.yaml」ファイルが必要になります。

 デフォルトでは、カレントディレクトリにある「compose.yaml」ファイルが読み込まれるため、作業ディレクトリに移動しておきます。

・「cd desktop/docker」コマンドを実行します。

PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker>

 「compose.yaml」ファイルを保存する「postgresql」ディレクトリを作成して、作成したディレクトリに移動します。次のコマンドを実行します。

  • 「mkdir postgresql」コマンド
  • 「cd postgresql」コマンド
PS C:\Users\joeac\Desktop\docker> mkdir postgresql

    Directory: C:\Users\joeac\Desktop\docker

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2024/04/17    23:34                postgresql

PS C:\Users\joeac\Desktop\docker> cd postgresql
PS C:\Users\joeac\Desktop\docker\postgresql>

VSCodeの起動

VSCodeで「compose.yaml」ファイルを作成します。

・「code compose.yaml」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker\postgresql> code compose.yaml

VSCodeが起動します。

「compose.yaml」ファイルの編集

・「compose.yaml」ファイルを以下のように編集して保存します。

services:
  postgres:
    image: postgres:14.2
    container_name: postgres_container
    environment:
      POSTGRES_DB: test-db
      POSTGRES_USER: test-user
      POSTGRES_PASSWORD: test-pass
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

定義内容の解説

「compose.yaml」ファイルの定義を解説します。

項目説明
servicesコンテナ化されるサービスを定義するセクション。
postgresPostgreSQLサービスの定義。
image使用するDockerイメージを指定。
container_nameコンテナの名前を指定。
environment環境変数を設定するセクション。
POSTGRES_DBPostgreSQLに作成されるデータベースの名前を指定。
POSTGRES_USERPostgreSQLに作成されるデータベースユーザーの名前を指定。
POSTGRES_PASSWORDPostgreSQLに作成されるデータベースユーザーのパスワードを指定。
volumesボリュームの定義。
db-dataPostgreSQLコンテナ内のデータを永続化するためのボリュームを指定。
volumesボリュームの定義セクション。
db-dataPostgreSQLコンテナ内のデータを永続化するためのボリュームを定義。
「compose.yaml」ファイルの定義

 このcompose.yamlファイルでは、PostgreSQLサービスが定義されています。PostgreSQLサービスは、PostgreSQLデータベースを提供します。環境変数を使用して、作成するデータベースの名前、ユーザー名、パスワードを指定します。また、PostgreSQLのデータは「db-data」という永続的なボリュームに保存されます。

コンテナの作成と実行

「docker compose up -d」コマンドを実行します。

このコマンドは、「compose.yaml」ファイルを配置した場所で実行する必要があります。

PS C:\Users\joeac\Desktop\docker\postgresql> docker compose up -d
[+] Running 14/14
 ✔ postgres 13 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                      10.0s
   ✔ 214ca5fb9032 Pull complete                                                                                    1.4s
   ✔ e6930973d723 Pull complete                                                                                    0.9s
   ✔ aea7c534f4e1 Pull complete                                                                                    0.9s
   ✔ d0ab8814f736 Pull complete                                                                                    1.7s
   ✔ 648cc138980a Pull complete                                                                                    1.8s
   ✔ 7804b894301c Pull complete                                                                                    2.2s
   ✔ cfce56252c3f Pull complete                                                                                    2.4s
   ✔ 8cce7305e3b6 Pull complete                                                                                    2.5s
   ✔ 888f20eb5ec8 Pull complete                                                                                    5.1s
   ✔ c64f3c3a5ce3 Pull complete                                                                                    3.0s
   ✔ 35a23f8d0819 Pull complete                                                                                    6.7s
   ✔ ff967638fa85 Pull complete                                                                                    3.7s
   ✔ 95df4ec75c64 Pull complete                                                                                    3.9s
[+] Running 1/3
 - Network postgresql_default    Created                                                                           0.6s
 - Volume "postgresql_db-data"   Created                                                                           0.5s
 ✔ Container postgres_container  Started

PostgreSQLコンテナへの接続

PostgreSQLコンテナに接続します。

・「docker compose exec postgres /bin/bash」コマンドを実行します。

 このコマンドは、Docker Composeを使用してPostgreSQLコンテナ内でbashシェルを実行するためのものです。このコマンドを実行すると、PostgreSQLコンテナ内で新しいbashシェルが開きます。これにより、コンテナ内で直接コマンドを実行したり、ファイルを編集したりすることができます。

項目説明
docker composeDocker Composeを使用してコンテナを操作するためのコマンド。
execコンテナ内でコマンドを実行するためのオプション。
postgres実行するコンテナの名前またはサービス名。
/bin/bash実行するコマンド。ここではbashシェルを起動するように指定しています。
「docker compose exec postgres /bin/bash」コマンド
PS C:\Users\joeac\Desktop\docker\postgresql> docker compose exec postgres /bin/bash
root@972f138f54cd:/#

シェルが起動します。

PostgreSQLデータベースに接続します。

・「psql -U test-user -d test-db」コマンドを実行します。

root@92399ded0808:/# psql -U test-user -d test-db
psql (14.2 (Debian 14.2-1.pgdg110+1))
Type "help" for help.

test-db=#

PostgreSQLのバージョン情報が表示されます。

PostgreSQLデータベースへの接続を終了します。

・「\q」と入力します。

test-db=# \q
root@92399ded0808:/#

PostgreSQLコンテナへの接続を終了します。

・「exit」コマンドを実行します。

root@92399ded0808:/# exit
exit
PS C:\Users\joeac\Desktop\docker\postgresql>

PowerShellのプロンプトに戻りました。