Dockerを使用したPostgreSQL環境の構築
この記事では、Dockerを使用してPostgreSQL環境を作成する手順を説明します。PostgreSQLはもっとも人気のあるオープンソースのリレーショナルデータベース管理システムの一つです。Dockerを使用することで、ホストOS上にPostgreSQLサーバーを手動でインストールや設定する手間を省き、開発やテストの目的で素早くPostgreSQLサーバーをセットアップすることができます。
docker-compose.ymlの設定
まず、PostgreSQLサーバーコンテナを作成するために、docker-compose.ymlファイルを作成します。このファイルには、Docker HubからPostgreSQLイメージを取得し、新しいPostgreSQLコンテナを作成し、必要な環境変数を設定するための必要な構成が含まれます。
以下がdocker-compose.ymlファイルの例です。
version: '3'
services:
  db:
    image: postgres:14
    container_name: postgres
    ports:
      - 5432:5432
    volumes:
      - db-store:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=passw0rd
volumes:
  db-store:
PostgreSQLコンテナの起動
docker-compose.ymlファイルが設定されたら、PostgreSQLサーバーコンテナを起動できます。Docker Composeを使用すると、たった1つのコマンドでアプリケーションのサービスを管理することができます。ターミナルで、docker-compose.ymlファイルがあるディレクトリに移動し、次のコマンドを実行します。
$ docker compose up -d
PostgreSQLサーバーコンテナが起動していることを確認するために、docker psコマンドを使用することができます。このコマンドは実行中のDockerコンテナを全てリストします。以下はコマンドと期待される出力です。
$ docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS         PORTS                    NAMES
da5beb67905a   postgres:14   "docker-entrypoint.s…"   9 minutes ago   Up 9 minutes   0.0.0.0:5432->5432/tcp   postgres
PostgreSQLコンテナが実行されていることを確認したら、docker execコマンドを使用してPostgreSQLコンテナのシェルにアクセスすることができます。
$ docker exec -it postgres /bin/sh
#
PostgreSQLコンテナの中に入ったので、PostgreSQLサーバーに接続するためにPostgreSQLクライアントCLIを使用できます。rootユーザーとして接続するには、次のコマンドを使用します。
# psql -h localhost -U postgres
psql (14.8 (Debian 14.8-1.pgdg120+1))
Type "help" for help.
postgres=#
PostgreSQLの操作
PostgreSQLサーバーに接続したら、テーブルの作成、データの挿入、データのクエリなど、さまざまなデータベース操作を行うことができます。以下は、テーブルの作成、データの挿入、そしてデータの取得の例です。
postgres=# create table test(id int, name varchar(10));
CREATE TABLE
postgres=# insert into test(id, name) values (1,'john');
INSERT 0 1
postgres=# select * from test;
 id | name
----+------
  1 | john
(1 row)
クリーンアップ
操作が終了したら、PostgreSQLの接続を終了します。
postgres=# exit
#
このコマンドにより、PostgreSQLサーバーからログアウトします。
PostgreSQLの接続を終了した後、Dockerコンテナのシェルに戻ります。exitでDockerコンテナを終了させます。
# exit
不要なリソースを消費しないようにするために、使用が終わったらDockerコンテナを停止し、削除した方が良いです。次のコマンドを使用してDockerコンテナを停止し、削除します。
$ docker compose down
[+] Running 2/2
 ⠿ Container postgres         Removed                    2.8s
 ⠿ Network my_proj_default    Removed