35
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker × PostgreSQL

Last updated at Posted at 2015-07-02

やりたいこと

  • Docker上にPostgreSQL Serverを構築する
  • データは永続化したいためPostgreSQL Serverのコンテナとは別コンテナにする
  • データ保持用のコンテナからバックアップおよびリストアする

データ保持用コンテナの作成

参考:Manageing data in containers

Dockerの公式サイトのドキュメントには、永続的なデータをコンテナ間で共有したい場合や非永続コンテナから使用したい場合、Data Volume Containerと呼ばれるコンテナを作成し、そこからデータをマウントするのが最善であると記述されています。

このベストプラクティスに従い、PostgreSQL Serverコンテナ用のデータボリュームコンテナを以下の様に作成します。

条件

  • 最低限のOS機能のみ必要なため、ベースとするdockerイメージは __busybox__にする
  • PostgreSQL ServerコンテナはPostgreSQL公式のdockerイメージを使用するためデータ格納ディレクトリは/var/lib/postgresql/dataとなり、このディレクトリをデータボリュームコンテナから可能にする

dockerイメージの作成

上記の条件からPostgreSQL Serverコンテナ用のデータボリュームコンテナのdockerイメージを作成します。

Dockerfile
FROM busybox
MAINTAINER xxx <xxx@gmail.com>

VOLUME /var/lib/postgresql/data
CMD ["/bin/true"]
dockerイメージの作成
$ docker build -t xxx/postgresql-storage .

xxx/postgresql-storageは作成するdockerイメージの名前で、
.はDockerfileのあるディレクトリになります。

コンテナの作成

作成したdockerイメージを元にデータボリュームコンテナを作成します。

コンテナの作成
$ docker create --name postgresql-storage xxx/postgresql-storage

PostgreSQL Serverコンテナの作成

参考:PostgreSQL docker doc

PostgreSQL公式のdockerイメージからコンテナを作成します。
コンテナ作成時に作成したデータボリュームコンテナをマウントさせます。

コンテナ作成
docker run --volumes-from postgresql-storage --name postgresql-server -p 15432:5432 -e POSTGRES_USER=xxx -e POSTGRES_PASSWORD=xxx -d postgres

--volumes-from postgresql-storageがデータボリュームコンテナのマウントを指定している部分になります。

データのバックアップ・リストア・マイグレーション

データボリュームコンテナにある永続データの操作は以下の様に行います。

バックアップ

バックアップ
docker run --rm --volumes-from postgresql-storage -v $(pwd):/backup xxx/postgresql-storage tar cvf /backup/backup.tar /var/lib/postgresql/data

--volumes-from postgresql-storageにバックアップ元のコンテナを指定します。

リストア・マイグレーション

注)リストアはバックアップを作成したコンテナに対して行い、マイグレーションは異なるコンテナに対して行います。

リストア・マイグレーション
docker run --rm --volumes-from postgresql-storage -v $(pwd):/backup xxx/postgresql-storage tar xvf /backup/backup.tar

--volumes-from postgresql-storageにリストア・マイグレーション先のコンテナを指定します。

35
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?