【エンジニア向け】DockerでPostgres立ち上げ時に初期データを自動で作成する

今回は、DockerでPostgresを立ち上げるときに、初期データを自動作成する方法について説明していきます。

Dockerを使うとコンテナを落とした時に保存されていたデータや、データベース、スキーマなどが全て削除されてしまいます。

Dockerを立ち上げる度にデータを準備するのは面倒だと思うので自動化していきましょう。

PostgresでCRUDのSQL操作を覚えよう

  1. 前提: Docker + Postgresの準備
  2. 初期データ用のSQL準備
  3. DockerfileでSQLをコピーする

1.前提: Docker + Postgresの準備

この記事の内容を試すにあたり、まだDockerの準備やPostgresの使い方が分からない方は以下の記事をご確認ください。

本記事は、以下の2つの記事が完了していることを前提としてます。

【エンジニア向け】Macbook + docker-composeでpostgresを動かす

【エンジニア初級】PostgresでCRUDのSQL操作を覚えよう

docker-compose.ymlの設定内容は、現在以下の通りになっています。

version: '3.1'

services:

  db:
    build:
      context: .
      dockerfile: postgres/Dockerfile
    container_name: postgres
    ports:
      - 5432:5432
    restart: always
    environment:
      POSTGRES_PASSWORD: example

2.初期データ用のSQL準備

今回は、以下の環境を自動で作成するための準備を行います。

  • testdbというデータベースを作成
  • employeeというテーブルを準備
  • employeeテーブルに3件分のデータを準備

「init.sql」というDDLを準備します。

create database testdb ENCODING = 'UTF8';

\c testdb;

CREATE TABLE employee (
  id bigint,
  name varchar(50),
  job varchar(20)
);

INSERT INTO employee (id, name, job) VALUES (1, '田中太郎', 'エンジニア');
INSERT INTO employee (id, name, job) VALUES (2, '鈴木花子', 'デザイナー');
INSERT INTO employee (id, name, job) VALUES (3, '山下哲也', '営業');

フォルダの構成は以下のようになっています。

docker-compose.yml
postgres
   |-Dockerfile
   |-init.sql

3.DockerfileでSQLをコピーする

最後に先ほど作成した「init.sql」をコンテナ内にコピーする処理を追加します。

「Dockerfile」を開いて以下を追加します。

FROM postgres:12

ENV TZ Asia/Tokyo
ENV LANG ja_JP.UTF-8
ENV LC_ALL "en_US.UTF-8"
ENV LC_TYPE "en_US.UTF-8"

#初期データ用のSQO追加
COPY postgres/*.sql /docker-entrypoint-initdb.d/
RUN chmod 755 /docker-entrypoint-initdb.d/*.sql

dockerが立ち上げっていたら一度落としましょう。

$ docker-compose down

再度、dockerを立ち上げます。

$ docker-compose up -d --build

データが追加されていることが確認しましょう。

まずはdockerにログインします。

$ docker exec --user postgres -it $(docker ps -aqf "name=postgres") /bin/bash

postgresにログインします。

$ psql

最後にデータを確認します。

postgres=# \c testdb
You are now connected to database "testdb" as user "postgres".
testdb=# \d
          List of relations
 Schema |   Name   | Type  |  Owner
--------+----------+-------+----------
 public | employee | table | postgres
(1 row)

testdb=# select * from employee;
 id |   name   |    job
----+----------+------------
  1 | 田中太郎 | エンジニア
  2 | 鈴木花子 | デザイナー
  3 | 山下哲也 | 営業
(3 rows)

無事、3件分のデータが作成されていれば成功です!

Postgresをこれから勉強したい方には、以下の書籍がおすすめです。

これからはじめる PostgreSQL入門【電子書籍】[ 高塚遙 ]

価格:3,278円
(2021/4/24 15:20時点)
感想(0件)

===============

以上、DockerでPostgres立ち上げ時に初期データを自動で作成する方法について解説してみました。

この情報が皆さんの人生のお役に立てれば幸いです。

エンジニアとして日本のITリテラシーを高めていきたいと共感して頂いた人は、是非このブログの拡散とyoutubeの方も見ていただけると嬉しいです。

記事を最後まで見ていただきありがとうございました。

執筆者: hiroエンジニア

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です