以下の記事で家庭内の情報共有として、dockerでgrowiを運用しはじめました。
といっても、growiに書いているのは私だけですが。。。
ただ、バックアップとリストアのやり方がわからなくて、後回しにしていました。
AmazonのS3が使えるなら
AmazonのS3を使用できるなら、以下が一番簡単だと思います。growiを作っている方たちで作ったバックアップ用のコンテナです。
AWS関連で契約が無くて私は試せませんでしたが、便利そうです。
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とします。