はじめに
備忘録がてら、docker-compose
を用いたPostgreSQLの環境構築の方法を記述します。
ディレクトリ構成は以下の通りです。
docker
├── docker-compose.yml
├── image
│ └── postgres
│ └── Dockerfile
└── postgres
└── init
└── init.sql
ファイルの作成
docker-compose.yml
まずはじめにdocker-compose.yml
を作成します。
起動するためのコマンドであるdocker-compose up -d
を叩いたときに読み込まれるファイルになります。
version: '3'
services:
postgres:
container_name: sample-db
build: ./image/postgres
restart: always
ports:
- "5432:5432"
volumes:
- ./postgres/init:/docker-entrypoint-initdb.d
environment:
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "postgres"
imageはDockerfileで定義しているので、それは次に説明します。
Dockerfileを使用しない場合は、build:
の部分で以下のようにすることでimageを定義することもできます。
image: postgres:latest
Dockerfile
docker-compose.yml
内のbuild:
で指定したパスにDockerfile
を作成してimageを定義します。
以下のように1行で定義すればOKです。
FROM postgres:15
今回はバージョン15を利用しています。
初期データ投入用のSQL
volumes:
でSQLファイルの場所を指定することで、起動時にSQLを流すことができます。
パスの指定はvolumes:
で指定されている内の前半部分である./postgres/init
です。
ここにSQLファイルを作成します。
-- DB作成
CREATE DATABASE sample_db;
-- 作成したDBに接続
\c sample_db;
-- テーブル作成
DROP TABLE IF EXISTS sample;
CREATE TABLE sample (
id integer NOT NULL PRIMARY KEY,
name char(100) NOT NULL,
created_date_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- ID用シーケンス作成
CREATE SEQUENCE sample_id_seq START 1;
-- サンブルデータの登録
INSERT INTO sample (id, name) VALUES(nextval('sample_id_seq'), 'sample name');
SQLの内容は任意なので、ご自身でお好きなように設定してください。
動かしてみる
起動
まずdocker-compose.yml
があるdocker
ディレクトリに移動します。
cd docker
次にコンテナを起動します。
docker-compose up -d
確認
正常に起動しているか確認します。
docker ps
このコマンドを叩いて、NAMES
の箇所にdocker-compose.yml
のcontainer_name:
に定義した名前が表示されていればOKです。
サンプルコード通りに記述している場合、sample-db
と表示されます。
次に起動したコンテナに接続します。
sample-db
の部分はコンテナ名です。
docker exec -it sample-db bash
コンテナ内で動いているDBに接続します。
psql -U postgres -d sample_db
sample_db
はSQLファイル内で作成したDBの名前になります。
SQLファイル内で新たにDBを作成していない場合はpsql -U postgres
のみで大丈夫です。
テーブルにデータが挿入されているか見てみます。
SELECT * FROM sample;
SQLファイル内でINSERT
したデータが出力されれば正常に動作しています。
注意点としては初期データを投入するSQL文が間違っていたとき、エラーログなどを出力してくれません。
そのためデータがうまく挿入されないなどの場合、DBに接続した状態で一度直接SQLを流すなどしてSQLの構文が正しいか確認してみるといいと思います。
コンテナの停止と削除
DBやDockerで起動したコンテナに接続している場合、exit
を実行することで接続を切ることができます。
/docker
に移動した状態で以下のコマンドを実行することで、コンテナを停止することができます。
docker-compose stop
削除する場合は次のコマンドになります。
docker-compose down
最後までお読みいただきありがとうございました。