LoginSignup
0
0

More than 3 years have passed since last update.

Linux環境で動作しているpostgresのDB環境をWindowsで再現し開発環境を整える

Last updated at Posted at 2019-07-31

本記事は、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名

上記のデータで再現できれば、ホスト側からでも、他のコンテナからでもアクセスできる。

0
0
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
0
0