DockerでPostgreSQL環境を構築【永続化】

こんにちは、おくやんです。

このブログでは、開発に役立つノウハウを実践的なコード例と共に紹介しています。

Docker上でPostgreSQLを利用したシステムを構築したい!
だけど、構築方法がわからない。。。

今回は、このようなお悩みを解決します。

 本記事の内容

Docker+PostgreSQL環境の構築手順を解説
データを永続化させる設定方法を解説

今回はDocker上でPostgreSQLを利用するための環境構築手順についてまとめました。

PostgreSQLはフリーのオープンソースRDBMSであり、非常に人気もあります。Dockerを利用すると環境構築が非常に簡単なので、本記事を参考に構築してみてください。

Docker+PostgreSQL環境の構築手順を解説

Docker+PostgreSQL環境の構築手順を解説画像

Dockerを利用したPostgreSQL環境の構築を行っていきます。構築手順はこちらです。

環境構築手順

1. docker-compose.ymlの作成
2. 環境変数設定ファイルの作成
3. データを永続化させる設定の追加

今回は下記の環境で構築を行います。

システム環境

OS Windows 10
Docker for Windows 4.19.0
Docker 23.0.5
Docker Compose v2.17.3
Docker Image postgres:15.3-alpine3.18

それでは早速、docker-compose.ymlの作成を行っていきましょう。

docker-compose.ymlの作成

docker-compose.ymlの作成画像

docker-compose.ymlを作成していきましょう。作業フォルダに移動後、下記内容のファイルを作成します。

docker-compose.yml

version: '3.8'
services:
  db:
    image: postgres:15.3-alpine3.18
    environment:
      - TZ=Asia/Tokyo
    ports:
      - 15432:5432
    env_file:
      - .env-dev

docker-compose.ymlの書き方に関しては下記記事で詳しく解説しています。

>> 【初心者向け】docker-compose.ymlの書き方を調べてみた

今回はPostgreSQL環境を構築する上でのポイントを解説していきます。

Dockerイメージの指定

image: postgres:15.3-alpine3.18

今回はPostgreSQL 15.3のイメージを指定しています。

ほかのバージョンも指定可能ですので、Docker Hubから探してみてください。

Docker Hubに上がっているイメージを利用することで、構築の手間を大幅に削減できます。

環境変数設定ファイルの指定

env_file:
  - .env-dev

外部の環境変数設定ファイルを読み込みます。

environmentを利用して定義することもできますが、ユーザやパスワードなど環境別に定義が必要なものは別ファイルとすると都合が良いです。

続いては環境変数設定ファイルの作成を行いましょう。

環境変数設定ファイルの作成

環境変数設定ファイルの作成画像

環境設定ファイルの作成を行います。今回はPostgreSQLのDockerイメージに必要な3つの環境変数を定義します。

docker-compose.ymlを作成したフォルダと同階層にファイルを作成しましょう。

.env-dev

POSTGRES_PASSWORD=postgrespassword
POSTGRES_USER=postgres
POSTGRES_DB=app_development

設定された値に合わせてDBの環境設定が行われます。各自の環境に合わせて設定値を変更してください。

POSTGRES_PASSWORD

POSTGRES_PASSWORD=postgrespassword

POSTGRES_PASSWORDはスーパーユーザのパスワードを設定します。

本項目は設定が必須です。

設定例では、パスワードがpostgrespasswordとなります。

POSTGRES_USER

POSTGRES_USER=postgres

POSTGRES_USERはスーパーユーザのユーザ名を設定します。

本項目は省略が可能です。

省略した場合のスーパーユーザ名が「postgres」となります。

POSTGRES_DB

POSTGRES_DB=app_development

POSTGRES_DBはDataBase名を設定します。

本項目は省略が可能です。

省略した場合のDataBase名はPOSTGRES_USERの値が使用されます。

設定例の場合、DBには下記の設定で接続可能です。

DB接続設定画像
DB接続設定

これで起動に必要な準備ができました。

次にデータを永続化させる設定をしていきましょう。

データを永続化させる設定を追加

データを永続化させる設定を追加画像

ここまでの設定でもコンテナを立ち上げDBにアクセスすることができますが、今のままではdocker-compose downを実行するたびにデータが消えてしまいます。

本番運用を考えるとデータの永続化は必須です。

今回は名前付きボリュームを利用したデータの永続化を行っていきましょう。

名前付きボリュームの設定を追加

docker-compose.ymlにvolumesの設定を追加します。

 docker-compose.yml

version: '3.8'
services:
  db:
    image: postgres:15.3-alpine3.18
    environment:
      - TZ=Asia/Tokyo
    ports:
      - 15432:5432
    env_file:
      - .env
    volumes: # 名前付きボリュームの割り当て定義を追加
      - db-data:/var/lib/postgresql/data

# 名前付きボリュームの定義を追加
volumes:
  db-data:
    driver: local

データを永続化させるため2カ所設定を追加しました。

 追加箇所

1. 名前付きボリュームの割り当て定義
2. 名前付きボリュームの定義

1. 名前付きボリュームの割り当て定義

volumes: # 名前付きボリュームの割り当て定義を追加
  - db-data:/var/lib/postgresql/data

名前付きボリュームをコンテナ上のフォルダに割り当てます。

PostgreSQLのDockerイメージではコンテナ上の/var/lib/postgresql/data配下にDBファイルを格納します。名前付きボリュームを割り当てることで、停止後もデータを残すことができます。

今回はdb-dataという名前のボリュームを割り当ています。

2. 名前付きボリュームの定義

# 名前付きボリュームの定義を追加
volumes:
  db-data:
    driver: local

名前付きボリュームの作成定義に関する記述です。db-dataという名前のボリュームを作成しています。

これで データを永続化が完了です。

まとめ:Dockerを利用してPostgreSQL環境を構築しよう

まとめDockerを利用してPostgreSQL環境を構築しよう画像

本記事ではDocker上でPostgreSQL環境を構築する手順について解説しました。

環境構築は下記3つの手順となります。

 Docker + PostgreSQL環境構築手順 

1. docker-compose.ymlの作成
2. 環境変数設定ファイルの作成
3. データを永続化させる設定の追加

上記の手順通りに進めていけば、誰でも簡単にDBの構築が行えます。

Webアプリケーションを構築する上でDBは不可欠なものとなりますので、本記事を通して構築の仕方をぜひ覚えてください。

最後まで読んでいただき、ありがとうございます。


DockerでPostgreSQL環境を構築画像
最新情報をチェックしよう!

Dockerの最新記事8件