docker上のmongodbをバージョンアップ
Amazon認証リバースプロキシで使っているmongodbを3.0.3から3.2へバージョンアップした。
まずは現バージョンを確認。
$ docker images mongo
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mongo 3 e22de68f3183 11 months ago 257.7 MB
mongo 3.0 e22de68f3183 11 months ago 257.7 MB
mongo 3.0.3 e22de68f3183 11 months ago 257.7 MB
mongo latest e22de68f3183 11 months ago 257.7 MB
念のためにデータファイルのバックアップを取っておく。データファイルの場所を調べる。
$ docker inspect rpaproxy_mongodb_1
"Mounts": [
{
"Name": "b5ddbc3634e42846b5daaa699d0bb8f98aaeb3bb446aa94bc13fb66e12ab7702",
"Source": "/var/lib/docker/volumes/b5ddbc3634e42846b5daaa699d0bb8f98aaeb3bb446aa94bc13fb66e12ab7702/_data",
"Destination": "/data/db",
"Driver": "local",
"Mode": "",
"RW": true
}
],
データファイルをホスト側のディレクトリへ書き出す。
$ docker cp rpaproxy_mongodb_1:/data/db ~/var/dump/rpaproxy-20160503
単純なファイルコピーだけでなく、mongodumpコマンドを使ってbson形式でエクスポートする。1回限りのコンテナを作り、動作中の rpaproxy_mongodb_1
コンテナと接続し、自コンテナ内の /dump
ディレクトリへ書き出す。その /dump
ディレクトリをdockerのvolume機能を使ってホスト側にマッピングしているという仕組み。この辺、dockerだと少し面倒だね。
$ docker run --rm --link rpaproxy_mongodb_1:db --volume ~/var/rpaproxy/dump/20160503:/dump mongo mongodump -h db
バックアップを取得できたので、最新のmongoイメージを取得。
$ docker pull mongo
$ docker run --rm mongo mongo --version
MongoDB shell version: 3.2.6
いきなり切り替えるのではなく、事前に別コンテナでリストアできるかをテストする。docker-composeコマンドの-pオプションで同じ環境をもう1セット作れる。この辺はdockerの便利なところ。
$ docker-compose -p rpaproxy2 up -d
$ docker run --rm --link rpaproxy2_mongodb_1:db --volume ~/var/rpaproxy/dump/20160503:/dump mongo mongorestore -h db
だいたい動いているので、動作中の環境も新しいコンテナへ切り替える。
$ docker-compose -p rpaproxy2 stop
$ docker-compose -p rpaproxy2 rm
$ docker-compose up -d
これで切り替えおしまい。