docker-composeでPostgre環境を構築するところから、データの確認までを紹介します。
環境
PostgreSQL 10.1
PostGIS 2.5
構成
今回は下記のような構成になります。dataディレクトリは自動で作成されますので、作らなくて問題ありません。
.
├── docker
│ └── db
│ └── data
│ └── sql
│ ├── create-tables.sql
│ ├── init-database.sh
│ └── insert-data.sql
├── docker-compose.yml
└── init-db.sh
構築
1. docker-compose.yml
まずは、docker-compose.ymlでPostgreコンテナを用意します。
docker-compose.yml
version: '3'
services:
db:
container_name: postgre_container
image: mdillon/postgis
environment:
POSTGRES_DB: postgre
POSTGRES_USER: docker
POSTGRES_PASSWORD: docker
volumes:
- ./docker/db/data:/var/lib/postgresql/data
- ./docker/db/sql:/docker-entrypoint-initdb.d
ports:
- 5432:5432
2. sql
初期テーブル用のsql
create-tables.sql
-- 拡張をインストール
CREATE EXTENSION IF NOT EXISTS postgis;
-- テーブル削除
DROP TABLE IF EXISTS test_table;
-- テーブル作成
CREATE TABLE IF NOT EXISTS test_table
(
gid INTEGER PRIMARY KEY,
geom GEOMETRY(POINT, 4612)
);
初期データ用sql
insert-data.sql
INSERT INTO test_table (gid, geom) SELECT 1, ST_GeomFromText('POINT(135 35)', 4612);
sql実行用シェルスクリプト
init-database.sh
#!/usr/bin/env bash
psql -U docker -d postgre < "/docker-entrypoint-initdb.d/create-tables.sql"
psql -U docker -d postgre < "/docker-entrypoint-initdb.d/insert-data.sql"
3. DB初期化シェルスクリプト
コマンドで打つのは少々面倒なので・・・。
init-db.bash
#!/bin/sh
docker-compose exec db bash -c "chmod 0775 docker-entrypoint-initdb.d/init-database.sh"
docker-compose exec db bash -c "./docker-entrypoint-initdb.d/init-database.sh"
実行
docker-compose起動
$ docker-compose up -d
たまに起動して、そのあとすぐに落ちることがあります。その際はまた上記のコマンドで起動すればOKです。
DB初期化
コンテナ立ち上げてから数秒待つ方がいいかもです。
$ ./init-db.sh
確認
1. pdAdminダウンロード
pgAdmin 4をダウンロードして確認できます。