東京生まれHOUSE MUSIC育ち

悪そうな奴はだいたい友達なの?

dockerで動いているgrowiのmongodbをバックアップリストアする

以下の記事で家庭内の情報共有として、dockerでgrowiを運用しはじめました。

といっても、growiに書いているのは私だけですが。。。

nomusicnolife.hatenablog.com

ただ、バックアップとリストアのやり方がわからなくて、後回しにしていました。

AmazonのS3が使えるなら

AmazonのS3を使用できるなら、以下が一番簡単だと思います。growiを作っている方たちで作ったバックアップ用のコンテナです。

AWS関連で契約が無くて私は試せませんでしたが、便利そうです。

github.com

mongodumpとmongorestoreを使う

色々と調べて、私はmongodumpとmongorestoreを使いました。

dockerではバックアップ用のコンテナを作るというのが、推奨されているようです。が、私の技術ではバックアップ用コンテナというのがわらかなくて、諦めました。

若干、強引だと思いますが、動いているmongodbのコンテナでmongodumpとmongorestoreするようにしました。

バックアップ方法

ダンプをmongodb.archiveというファイルに固めて、固めたフィルをコンテナからホストにコピーするというものです。

コマンドはすべてホストで入力します。

# docker exec -d growi_mongo_1 mongodump --archive=mongodb.archive
# docker cp growi_mongo_1:/mongodb.archive 

簡単な解説。

「‐d」はデタッチモードです。

デタッチ先の「growi_mongo_1」 はdocker上で動いているmongodbのコンテナ名です。「docker ps」のNAMESに表示されます。

「--archive」は固めるためのオプションで、ファイル名を指定しました。これまで動かした実績だと、コンテナ上のルートディレクトリにファイルが作成されます。

リストア方法

リストア先のコンテナにアーカイブしたファイルをコピーし、その後mongorestoreします。

docker cp mongodb.archive growi_mongo_1:/
docker exec -d growi_mongo_1 mongorestore --drop --archive=mongodb.archive

オプションの「--drop」をつけないと、過去のデータが残ったままでリストアできませんでした。なので、このオプションをつけています。

もっとうまくやる方法はあると思う

もっとうまくやる方法はあると思うのです。

バックアップ用のコンテナを作って、--volumeオプションでホストとコンテナを共有しようとしたのですが、できなくて。。。

これでも動くので、いったんOKとします。

f:id:padobure:20181014175505j:plain:w250