タイトルどおり単純にDockerでPostgreSQLデータベースサーバーを起動してみるだけ

Dockerfile

FROM postgres
EXPOSE 5432

DockerHubにあるpostgresイメージを使うだけ。まあ普通になんなくビルドして以下のコマンドでコンテナを起動

docker run \
    -e POSTGRES_USER=testuser \
    -e POSTGRES_PASSWORD=1234 \
    -p 5432:5432 \
    -t test

であとは接続してデータベースを作ったりなんやかんやしたりする。だけどこれデータが永続化されていないのでコンテナを落としたりとかすると作ったデータベースなどが参照できない。要はデータが無い状態みたいになる

確証はないが指定をせずに起動させたりするとPostgreSQLが利用するデータをDocker側が起動した際にDocker Volumeを動的に作成しそこにデータがあるから落としたりして再度起動したりするとまた違うDocker Volumeを参照しているからなのではないかと。つーことでPostgreSQLが使用するデータを永続化させるためにDocker Volumeを指定しよう

docker run \
    -e POSTGRES_USER=testuser \
    -e POSTGRES_PASSWORD=1234 \
    -v pgsql:/var/lib/postgresql/data \
    -p 5432:5432 \
    -t test

-vオプションでDocker Volumeを指定してやることでコンテナが利用するDocker Volumeを指定できるみたいな感じなのかなと。とりまこれでデータベース作って一回落としてからまた再度起動しても作ったデータベースは残ったままになる

ちなみにこれはPostgreSQLだけじゃなくてMySQLとかでもそうなのでデータベースなどを利用するようなサーバーをコンテナで利用する場合にはちゃんとDocker Volumeを指定しよう