Docker構築のRailsにPostgreSQLの論理バックアップ機能をつける

どうして情報がないのか。たどり着けていないのか。はたまたバッドノウハウなのか。

環境

・Docker
・Rails(Dockerコンテナ)
・PostgreSQL(Dockerコンテナ)

やりたいこと

Railsのコンテナ内部からコマンドでSQLをダンプしてアプリコンテナ内に保存する。

必要だったこと

・アプリ(Rails)コンテナ内にもPostgreSQLをインストールしておく
・PostgreSQL saidのバージョンをアプリコンテナとDBコンテナで揃えておく

※Docker+Rails+PostgreSQLで環境が立ち上がっている前提。
※ウェブサーバーは別コンテナでNginXを用意した。

動作確認用にアプリコンテナにログインしてみる

$ docker-compose exec [アプリコンテナ名] bash

PostgreSQLのダンプファイルを書き出し

$ pg_dump -h [DBコンテナ名] [データベース名] > [書き出しファイル名]

pg_dump時には必ずパスワードを求められるので docker-compose.ymlに環境変数「PGPASSWORD」を追加しとく。

docker-compose.yml

environment:
  PGPASSWORD: 'hogehogefugafuga1212'

コンテナ再起動

$ docker-compose restart

あとはコンテナ内部に保存されたダンプファイルをRailsから参照してPOSTリクエストでダウンロードできるようにする。
→Railsにエクスポート画面つくって、controllerに上記のダンプ処理を実行するようにsystemコマンドを書いてルーティングすれば完成。

つまづいたところ

・docker-compose run とdocker-compose execの違い
・Ubuntu(Vagrant環境)のaptが古い(updateしてもPostgreSQL13が入らない)
・Docker imageで入れたバージョンとDockerfileで指定したバージョンの競合
・コンテナ間でのpsqlでのアクセス

公開日