Dockerから下したインスタンスを再びDockerに載せた
1534349218クソみたいな文章の前に、役に立ちそうな情報を記述しておきます。
DockerのPostgreSQLのバックアップの方法
Dockerでコンテナを立てる
docker run --rm -p 5432:5432 -v postgres:/var/lib/postgresql/data -d postgres:9.6-alpine
このときに立てるPostgreSQLのバージョンはdocker-compose.ymlなどに書かれてる ものと同じバージョンを指定すること。
ホストでPostgreSQLを走らせていると、同じポートに割り当てできないので、 別のポートを指定すること。
ホスト側でバックアップを実行する
pg_dump -h localhost -p 5432 -U postgres -f backup.sql
Dockerで動かしているとだいたいユーザー名もdb名もpostgresだと思う。 たぶん。
バックアップが済んだら、ちゃんとコンテナをしまっておきましょう。
DockerへDBを移行する
基本的に普通のDBと同じように扱える(そらそう)。
上のように、コンテナを立てて、バックアップしたファイルから流し込めばOK。
psql -h localhost -p 5432 -f backup.sql ${DB_NAME}
これは本当にこのコマンドでいけるかどうかはわかりません…。 当時はマジで適当に移したので、たぶんこうでしょうというアレです。
さて
めんどくせえことやってんな、と思われても仕方なし…。 だけども試行錯誤できるのが一人インスタンスの良さですね。
実際のところ、初期は非力な録画・ファイルサーバにインスタンスを 無理矢理載せてたこともあり、非常に重かったんです。
ただでさえ重い環境にDockerということもあってか、非常にレスポンスが 悪かった。普通に投稿ができないこともあったくらいでした。 そこで直接動かせばよいと思い至り、Dockerから下して直接動かして 動作をすこしでも軽くしようとしていたわけです。
しかし今ではメモリは十分(6GBだけど)にあって、かつSSDなので 非常に高速。本体そのものはThinkCentre M92 Tinyで、 メモリを1枚増やしたのとHDDをSSDに換装したくらい。
これまではパフォーマンス重視でいたので、ほかの不具合などはまあ あってもなんとかやりくりしてきたのですが、 このあいだOS(ArchLinux)のアップデートをかけたところ、 protobufあたりのバージョンがあがって、依存関係が壊れてしまいました。 そもそもArchLinuxなんかを鯖OSにしている時点でアレなんですが。
前回、Node.jsのバージョンによってStreamingが死んだ件で (それに関連する話題が出たときに)、 これはもうDockerで動かしていたほうが安定するだろうというのがあったので、 今回は丁度よく壊れたのでDockerに再び納めることとしました。
どうでもいいことなんですが、DockerでのDBバックアップの方法とか 常識だったんですかね…。 自分が知らなかったので、Dockerから下すときはわりと滅茶苦茶な方法で 下してたんだなあというのを今になって思います。
生MastodonでのDBバックアップはMastodonのdocumentationに記述がありました けども、Docker環境でのDBバックアップは見当たりませんでした。
自分はインスタンス立てたころ、このあたりの知識が皆無 だったので(今は大分マシになった程度)、 Dockerでお気軽に立てられる反面、維持に関する情報を得るには 試行錯誤とともにググり力が必要だったなあと思います。
ともあれ、Dockerで立てたインスタンスがDockerを脱ぎ、再びDockerの 上で動きはじめましたとさ。