自由気ままに書いちゃおう

好きなことをつらつらと・・・

【Docker】volumeマウントのバックアップ(volumes-fromオプション)

下記記事の続きです。

www.guri2o1667.work


今回は違う方法で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です。
f:id:guri2o1667:20210526103152p:plain

mysql2コンテナにはmysqlデータベース(db1)にテーブル(table1)が存在し、
レコードが1行存在しています。

f:id:guri2o1667:20210526103007p:plain


mysql2のvolumeマウント情報を利用して、mysql3コンテナを新規作成します。

1.mysql2を停止します。

f:id:guri2o1667:20210526103711p:plain

2.以下コマンドを実行します。(mysql3コンテナを新規作成します)
volumes-fromオプションにはmysql2を指定します。

docker run -itd --name mysql3 --volumes-from mysql2 -e MYSQL_ROOT_PASSWORD=password mysql:5.7

f:id:guri2o1667:20210526103814p:plain

3.mysql3コンテナのマウント情報を確認します。

f:id:guri2o1667:20210526104123p:plain

mysqlvolume2というvolume名がマウントされていることが確認できました。
※期待通りの動作です。

4.mysql3コンテナにログインし、mysql情報を確認します。

f:id:guri2o1667:20210526103938p:plain

問題なく、mysql3コンテナにてデータベースの情報を確認することができました。

5.mysql3コンテナで、insert文を実行してみます。

f:id:guri2o1667:20210526104430p:plain

問題なく、insertできました。

■volumes-fromオプションを使ってバックアップを取得してみる

volumes-fromオプションの動作は上記で確認ができましたので、
本題のvolumeマウント(ここでは、mysqlvolume2)のバックアップを取得してみます。

1.以下コマンドを実行します。
mysqlvolume2のバックアップを取得するため、bk_mysqlvolume2ディレクトリを新規作成しております。

f:id:guri2o1667:20210526105520p:plain

2.以下コマンドを実行します。

docker run --rm --volumes-from mysql2 -v "$PWD":/bk_dst busybox tar cvzf /bk_dst/mysqlvolume2_bk.tar.gz -C /var/lib/mysql .

f:id:guri2o1667:20210526105856p:plain

-vオプションがbindマウントだけになりました。
どのvolumeマウントの情報を利用するのかが(=どのコンテナのvolumeマウントデータをバックアップするのかが)volumes-fromオプション部分を見ることでわかりやすくなったと思います。

3.取得したバックアップデータを確認します。

f:id:guri2o1667:20210526110058p:plain



以上です。