下記記事の続きです。
今回は違う方法でvolumeマウントのバックアップを取得いたします。
■はじめに
volumeマウントをバックアップする際、以下のようなコマンドを実行しました。
docker run --rm -v mysqlvolume1:/bk_src -v "$PWD":/bk_dst busybox tar czvf /bk_dst/mysqlvolume1_bk.tar.gz -C /bk_src .
このコマンドの場合、volume名を指定している為、volume名を覚えておく、もしくはvolume名を気にしておく必要があります。
仮に複数台のコンテナを管理している場合、
各コンテナのvolume名を覚えておくのは少し骨が折れます。
そのため、バックアップ取得時にvolume名を気にしないで済むオプション(volumes-from)があります。
■volumes-fromオプションとは
コンテナ起動時、他のコンテナのvolumeマウント情報を引き継ぐことができます。
例えば、Aコンテナのvolumeマウントが/var/tmp/a-conだった場合、
Bコンテナを新規作成時にvolumes-fromオプションを利用することで、
自動的に/var/tmp/-aconがマウントされた状態でBコンテナが起動してきます。
volumes-fromオプションを利用することで、
バックアップ対象となるコンテナのvolumeマウント情報を利用してvolumeマウントデータのバックアップを取得することができます。
■volumes-fromオプションを使ってみる
まず、以下のようにmysql2コンテナが存在するとします。
mysql2コンテナがマウントしているvolume名はmysqlvolume2です。
mysql2コンテナにはmysqlデータベース(db1)にテーブル(table1)が存在し、
レコードが1行存在しています。
mysql2のvolumeマウント情報を利用して、mysql3コンテナを新規作成します。
1.mysql2を停止します。
2.以下コマンドを実行します。(mysql3コンテナを新規作成します)
volumes-fromオプションにはmysql2を指定します。
docker run -itd --name mysql3 --volumes-from mysql2 -e MYSQL_ROOT_PASSWORD=password mysql:5.7
3.mysql3コンテナのマウント情報を確認します。
mysqlvolume2というvolume名がマウントされていることが確認できました。
※期待通りの動作です。
4.mysql3コンテナにログインし、mysql情報を確認します。
問題なく、mysql3コンテナにてデータベースの情報を確認することができました。
5.mysql3コンテナで、insert文を実行してみます。
問題なく、insertできました。
■volumes-fromオプションを使ってバックアップを取得してみる
volumes-fromオプションの動作は上記で確認ができましたので、
本題のvolumeマウント(ここでは、mysqlvolume2)のバックアップを取得してみます。
1.以下コマンドを実行します。
mysqlvolume2のバックアップを取得するため、bk_mysqlvolume2ディレクトリを新規作成しております。
2.以下コマンドを実行します。
docker run --rm --volumes-from mysql2 -v "$PWD":/bk_dst busybox tar cvzf /bk_dst/mysqlvolume2_bk.tar.gz -C /var/lib/mysql .
-vオプションがbindマウントだけになりました。
どのvolumeマウントの情報を利用するのかが(=どのコンテナのvolumeマウントデータをバックアップするのかが)volumes-fromオプション部分を見ることでわかりやすくなったと思います。
3.取得したバックアップデータを確認します。
以上です。