Docker(docker-compose)でPostgreSQLの環境構築の覚書
はじめに
Dockerを用いたPostgreSQLの環境構築について試したときのメモを書いておく.
以下を参考にした
やったこと
DockerでPostgreSQLサーバをコンテナとして起動して,クライアントプログラム(psql)からデータベースにアクセスしたりをやってみた.また,イメージの初回起動時に事前に.sqlファイルに定義したテーブルが作成されるようにしたりした.
環境構築の前に
以下を実行した.postgresのベースとなるイメージの取得と,PostgreSQLのクライアントの方のインストールを行う.
% docker pull postgres:14-alpine
クライアントが欲しい場合はlibpqをinstallする.
% brew install libpq
フォルダ構成
以下のような構成から成る.
[~/Code/Project/proj_y2021/proj1229/docker-postgres] % tree -a . . ├── docker-compose.yml └── postgres ├── .env ├── Dockerfile └── db └── intidb.sql 2 directories, 4 files
各ファイルについて
docker-compose.yml
今回はローカルマシンの5433ポートからコンテナ内のpostgresサーバ(5432ポートで待機)にアクセスすることにする.
また,ユーザ情報等の環境変数の内容は外部のファイル".env"に分離したので,長くならずすっきりしたと思う.
また,イメージの初回起動時に実行される.sqlファイルを格納したフォルダはdocker-entrypoint-initdb.d
にマウントされるように設定した.
[~/Code/Project/proj_y2021/proj1229/docker-postgres] % cat docker-compose.yml version: '3' services: db: container_name: test-postgres-db build: ./postgres/ env_file: ./postgres/.env volumes: - ./postgres/db:/docker-entrypoint-initdb.d ports: - "5433:5432"
Dockerfile
[~/Code/Project/proj_y2021/proj1229/docker-postgres] % cat postgres/Dockerfile FROM postgres:14-alpine ENV LANG ja_JP.utf8
.env (ユーザ情報を定義した環境変数をまとめたファイル)
[~/Code/Project/proj_y2021/proj1229/docker-postgres] % cat postgres/.env POSTGRES_USER=postgres POSTGRES_PASSWORD=hogehogepw POSTGRES_DB=test_db
init.sql
コンテナ起動時に,データベースにテーブルが作成するようにする.以下の仮のテーブル(名前を保存する"members")を作ってみる.
[~/Code/Project/proj_y2021/proj1229/docker-postgres] % cat postgres/db/intidb.sql CREATE TABLE members ( id integer, name varchar(30) ); INSERT INTO members VALUES (1, 'John Smith'); INSERT INTO members VALUES (2, 'Richard Roe');
membersと名付けたテーブルに適当なエントリを挿入した.
イメージのビルド
[~/Code/Project/proj_y2021/proj1229/docker-postgres] % docker-compose build
コンテナの起動
[~/Code/Project/proj_y2021/proj1229/docker-postgres] % docker-compose up -d Creating network "docker-postgres_default" with the default driver Creating test-postgres-db ... done
クライアント(psql)でデータベースにアクセスしてみる
postgresサーバに接続
% psql -h localhost -p 5433 -U postgres Password for user postgres: psql (14.1) Type "help" for help.
イメージが初回起動したときに作成されたデータベース(test_db)に接続し,membersテーブルからデータを取得する.
postgres=# \c test_db You are now connected to database "test_db" as user "postgres". test_db=# \dt List of relations Schema | Name | Type | Owner --------+---------+-------+---------- public | members | table | postgres (1 row) test_db=# select * from members; id | name ----+------------- 1 | John Smith 2 | Richard Roe (2 rows) test_db=# \q
最後に (後片付け)
期待通りに動いたのを確認した後は以下のようにコンテナを終了してボリュームも一緒に削除した.
[~/Code/Project/proj_y2021/proj1229/docker-postgres] % docker-compose down --rmi all --volumes