例えば、数 GB ある CSV ファイルをローカルマシンで雑に集計したいときは Excel や Pandas だとちょっと厳しかったりするので、PostgreSQL みたいな RDBMS にツッコんで SQL でやりたい。
雑にサーバに立てる方法といえば Docker 。
PostgreSQL は Docker Hub に公式イメージがあるので安心して使えて便利。
しかし使うたびに「オプション何指定したら良いんだっけ」となるので備忘録として手順をまとめておく。
詳しいことはすべて Docker Hub のページに書いてあるのでそこを読めば分かる。
注意点として、今回は雑にサーバ立てる場合の解説なので、アプリケーションを作る場合はちゃんと docker-compose.yml
を書いたほうがいいと思う。
コンテナを起動する
$ docker run --rm -d \
-p 15432:5432 \
-v postgres-tmp:/var/lib/postgresql/data \
-e POSTGRES_HOST_AUTH_METHOD=trust \
postgres:12-alpine
- コンテナの停止時には削除する (
--rm
)- ボリュームにデータを保存する設定 (後述) なので、コンテナは消えても問題ない
- ホスト側のポートは適当に
15432
にした (ご自由に) - ボリューム
postgres-tmp
を/var/lib/postgresql/data
にマウントする- ボリュームが存在しない場合は新規作成される
- データはこのボリュームに保存されるため、コンテナを削除しても保存したデータは削除されない
- 環境変数
PGDATA
を指定すればコンテナ内のデータディレクトリを変更できるが、特に変更する必要はないと思う
- パスワードなしでアクセスできる設定 (
POSTGRES_HOST_AUTH_METHOD=trust
)- もちろんセキュリティ的にはよくない設定なので、外部公開するサーバなどでやってはいけない
- イメージは
12-alpine
(Alpine Linux ベースのバージョン 12 系最新) を使った
接続してみる
何らかの PostgreSQL クライアントを使って接続してみる。
psql
コマンドを使うとこんな感じ。
$ psql -h localhost -p 15432 -U postgres
- 初回起動時に特に環境変数を指定しなかった場合は
postgres
というユーザとpostgres
というデータベースが作成される - 初回起動時に環境変数でパスワードを指定しなかった場合はパスワードなしで接続できるが、その場合は
localhost
以外からの接続はできない