Dockerのデータボリュームをバックアップ/リストアする

2019年4月4日

Dockerのデータボリュームのバックアップを試してみます。

 

データボリュームのバックアップを取るためには、まずそのデータボリュームをマウントしたデータボリューム・コンテナを作成します。

 

データボリューム(Data Volume)とデータボリューム・コンテナ(Data Volume Container )に関しては下記の関連ページをご覧下さい。

 

Data Volume Container について [Dockerの永続化]

 

これから下記のような構成のデータボリューム・コンテナを作成します。

 

 

MySQLサーバーとしてのコンテナで、名前がmycon1のデータボリューム・コンテナを作成します。下記コマンドによってmyvol1という名前のデータボリュームも自動で生成されます。

 

作成したコンテナの起動を確認。

 

同時に作成したデータボリュームを確認。

 

作成したコンテナに入り、MySQLに接続します。

 

データベースの一覧を表示。

 

sample01という名前のデータベースを作成します。

 

作成したデータベースを確認。

 

 

データボリュームのバックアップ


 

作成したsample01データベースが保存されているデータボリュームであるmyvol1のバックアップをおこないます。上述した様に、データボリュームのバックアップを取るためには、まずそのデータボリュームをマウントしたデータボリューム・コンテナを作成します。すでにmyvol1とマウントしたmycon1のデータボリューム・コンテナを作成しているので次へ進みます。

 

ホスト側のカレントディレクトリ($PWD)に、MySQLのデータが保存されている「/var/lib/mysql」のバックアップ(backup.tarという名前にした)を取りだすだけのコンテナを作成します。と言ってもこのコンテナは–rmオプションによってすぐに破棄されます。

 

あらためて下記イラストによってバックアップする過程を説明してみます。

 

 

myvol1データボリュームのバックアップを取るためには、マウントしているmycon1データボリューム・コンテナを利用します(–volumes-fromで指定)。busyboxは軽量のLinuxイメージで、tarコマンドを利用するために利用します。つまりbusyboxで作成したコンテナ内で対象とするファイル群のバックアップファイル(backup.tar)を作成し、そのコンテナ内の/backupディレクトリに保存しています。backupディレクトリは、ホスト側のカレントディレクトリ($PWD)とマウントしているので、結果的にdocker runを実行しているホスト側のカレントディレクトリにバックアップファイル(backup.tar)が保存されます。

 

 

成功すれば、ホスト側のカレントディレクトリにbackup.tarファイルが生成されます。

 

 

リストア


 

次にこのbackup.tarバックアップファイルのリストアを試してみます。

 

mycon2という名前のMySQLサーバのコンテナを新規に作成し、このコンテナにバックアップファイルをリストアすることを想定します。下記コマンドによって同時にデータボリュームであるmyvol2も生成されます。

 

myvol2が生成されていることを確認。

 

mycon2コンテナが作成されたことを確認。もちろんこの新しいコンテナには先ほど作成したsample01データベースは存在しません。これからこのコンテナにバックアップデータをリストアして、sample01データベースが表示されることを確認します。

 

リストアするためだけのコンテナを作成します。バックアップした際と同様にこのコンテナも–rmオプションによってすぐに破棄されます。

ホスト側のカレントディレクトリ($PWD)に置いてあるbackup.tarを解凍します。–volumes-fromに新規作成したmycon2コンテナを指定しています。結果的に、mycon2コンテナに紐付いているデータボリュームであるmyvol2に解凍されたデータが保存されます。

 

MySQLに解凍したデータが反映されるように、コンテナが起動したままの場合は「restart」します。

 

新規に作成したMySQLサーバのコンテナであるmycon2に入り、sample01データベースがリストアされていることを確認。

 

 

 

LINEで送る
Pocket

Copyright © 2019 思考の葉 All Rights Reserved.  プライバシーポリシー