🐘

Dockerを使ってPostgreSQLの学習環境をつくる

2025/01/25に公開

手軽にSQLを実行できる環境がほしかったので、PostgreSQL Tutorialで提供されているサンプルDBが動く環境をDockerで構築します。

compose.yaml

まず、docker compose コマンドで起動する compose.yaml をつくります。Docker Hubを見に行くとPostgreSQLのイメージがあるので、いくつか設定を追加します。

compose.yaml
version: "3.9"

services:
  db:
    build:
      dockerfile: ./Dockerfile
    restart: always
    container_name: dvd_rental_db
    environment:
      POSTGRES_USER: postgres # コンテナ内のDBで作成されるsuperuser
      POSTGRES_PASSWORD: postgres # superuserのパスワード
      POSTGRES_DB: dvdrental # デフォルトDB
    ports:
      - 5432:5432
    volumes:
      - dvd_rental_data:/var/lib/postgresql/data # volumeを指定してデータを永続化

volumes:
  dvd_rental_data:

Dockerfileと初期化スクリプト

続いてベースとなる postgres イメージを拡張した Dockerfile をつくります。初期データのリストアを毎回行うのは面倒なので、コンテナ起動時に実行されるようにします。

Dockerfile
FROM postgres:latest

# 初期データをダウンロードするためにCLIツールをインストール
RUN apt-get update && apt-get install -y \
    wget \
    unzip

# `/docker-entrypoint-initdb.d` は初期化用のDDLや、シェルスクリプトを配置するためのディレクトリ
# コンテナ起動時にデータが空であれば、これらが実行される
WORKDIR /docker-entrypoint-initdb.d

# 初期データをダウンロードして解凍
RUN wget -O dvdrental.zip https://neon.tech/postgresqltutorial/dvdrental.zip \
 && unzip dvdrental.zip \
 && rm dvdrental.zip

COPY ./init.sh /docker-entrypoint-initdb.d/
init.sh
#!/bin/bash

pg_restore -U "$POSTGRES_USER" -d "$POSTGRES_DB" /docker-entrypoint-initdb.d/dvdrental.tar

使い方

docker compose でコンテナを起動したうえで、任意のSQLクライアントからDBに接続します。dvdrental 内にテーブルが作成されていればOKです。

# 起動
docker compose up -d
[+] Running 1/1
 ✔ Container dvd_rental_db  Started
                                 0.0s

データを初期化したいときも、コンテナを作り直すだけで済みます。Dockerは使い捨てたいデータの環境構築にも便利ですね。

docker compose down
docker volume rm dvd_rental_store_dvd_rental_data # ボリューム名を指定して削除
docker compose up
株式会社FLAT テックブログ

Discussion