本記事は、Linux環境で動作しているアプリケーション環境内のPostgresqlサーバの
バックアップをもってWindows環境に再現することを目的とした備忘録です。
1.Linux環境からPostgresのバックアップをとる
pg_dump -F p -f ./filename_to_save.sql.20190730 \
-h 192.168.1.2 \
-U password db_name
上記のコマンドでLinuxで動作しているPostgresのバックアップを保存する
2.Windows上にDockerでPostgresサーバーのコンテナを建てる
以下のコマンドでPostgresコンテナを作成する
docker container create --name p-server #<任意のコンテナ名> \
-p 5432:5432 #<任意のホストOS側ポート名>:<規定のゲスト側ポート名> \
--mount type=bind,src=/C/Users/your-name/postgres/backup,dst=/tmp \
--mount type=volume,src=postgres-server,dst=/var/lib/postgresql/data \
--network postgres-network
-e POSTGRES_USER=user \
-e POSTGRES_DB=user_db \
-e POSTGRES_PASSWORD=user_password \
postgres:latest #<作成もとにしたい任意のコンテナイメージ>
(※上記の、コマンド内で --mountというマウント命令を2つ指定しているのは、postgresサーバが参照する
postgresの実データのディレクトリをWindowsホストではマウントできないため、
他のコンテナ側ディレクトリをホストOS側にコンテナマウントして、
そこからバックアップSQLをpostgresコンテナ内で実行するため。)
上記の用にdockerコマンドを実行した後
docker container start p-server #<コンテナ作成時に指定したコンテナ名>
上記を実行するとコンテナが起動する
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d96c3082081d postgres:latest "docker-entrypoint.s…" 4 minutes ago Up About a minute 0.0.0.0:5432->5432/tcp p-server
※上記の用に起動していればOK。
3.postgresサーバーコンテナにバックアップのsqlファイルを流し込む。
まずは、バックアップSQLファイルをpostgresサーバーに流し込むため、作成したpostgresコンテナに入る
# 下記コマンドを実行して、postgresコンテナのターミナルにログインする
docker container exec -it p-server /bin/bash
実行後以下の用にPostgresのターミナルにログインできる
C:\Users\your-name>docker container exec -ti p-server /bin/bash
root@d96c3082081d:/#
ログイン後、手順2のコンテナ作成時にマウントしたホスト側OSとコンテナ側のディレクトリがただしくマウントされているかを調べる。
root@d96c3082081d:/tmp# touch index.dat
などとしてホスト側でファイルを共有できることを確認後、バックアップのSQLファイルをマウントされたホスト側OSのディレクトリにおいてあげる。
後は任意のpostgres側コマンドで バックアップファイルを実行する。
4.ホスト側OSから任意のpostgresGUIアプリなどでDB状況を復帰できたことを確認する。
host: localhost
user: user # コンテナ作成時に指定したユーザー名
password: user_password # コンテナ作成じに指定したパスワード
database: user_db #同じく作成時にしていした初期DB名
上記のデータで再現できれば、ホスト側からでも、他のコンテナからでもアクセスできる。