Databaseコンテナを構築(PostgreSQL編)
ソフトウェア開発に欠かせないデータベース環境をWindows ノートPCに構築します。
今回はPostgreSQL環境を構築します。
モチベーション
- 開発用にPostgreSQL環境をノートPC上で構築したい。
- ポート、ユーザ、スキーマの定義は起動時に自動的に設定してほしい。
手順
環境
- Windows 10 Pro
- Docker Desktop for Windows
設定ファイルの作成
- ファイルは以下のようなディレクトリ構造で配置します。
{任意フォルダ}
├ docker-compose.yaml
└ docker-entrypoint-initdb.d
└ init.sh
- docker-compose.yamlを作成します。
version: '3'
services:
db:
image: postgres:12-alpine
container_name: db-container
ports:
- 5433:5432
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: admin
volumes:
- /C/Task/RedmineWorkHICT/#7212/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
- init.shを作成します。
set -e
psql -U admin admin << EOSQL
CREATE TABLE Users(
account_id SERIAL PRIMARY KEY,
account_name VARCHAR(20),
email VARCHAR(100),
password CHAR(64)
);
CREATE TABLE UserStatus(
status VARCHAR(20) PRIMARY KEY
);
EOSQL
改行コードをLinuxに揃える
今回の環境はWindowsのなので改行コードによりdockerの実行がエラーになる場合があります。
以下を実施して、改行コードをLinuxに揃えておきます。
- VSCodeの場合:右下の改行コードの箇所をLFにする。
- Vimの場合:以下のコマンドでCR改行コードを削除。
:%s/^M//g
- エラーがある場合は、以下コマンドでコンテナとユーザキャッシュを削除します。
docker-compose down -v
docker-compose build --no-cache
docker-compose up -
起動とチェック
- 以下コマンドで起動します。
docker-compose up -d
- PostgreSQLのコンソールまで入ります。
docker exec -it db-container bash
psql -U admin
- 適当にSQL文を発行して動作を確認します。
まとめ
上記手順で新規に環境を構築できました。
- docker-compose.ymlで以下を定義する。
- PostgresSQLのコンテナイメージ
- ユーザとパスワード
- ポート
- init.shでスキーマの定義を自動的に設定する。
応用編
- データが入った状態で開始したい場合には以下の方法があります。
- init.shにInsert文も記述する。(少量向け)
- バックアップデータからレストアする。
- DBデータディレクトリをマウントする。