VOLUMEコンテナとsnapshot(ryncによるバックアップ)をとる機能を提供するコンテナです。
370
dockerにおけるVOLUMEコンテナとsnapshotをとる機能を提供するコンテナです。
snapshotにはrsyncを使用しており、無圧縮でコピーが作成されます。ただし、前回のsnapshotから差分がないファイルは前回のsnapshotに対してハードリンクが行われるためディスク消費はありません。
snapshotのディレクトリ形式は@GMT-YYYY.MM.DD-hh.mm.ssとなります。
注意点として、このsnapshot機能は本来の瞬間的なsnapshotを提供しません。これは、Write操作との競合が発生しているファイルの内容を保証しないことを意味します。このため、バックアップを行う時間帯のWrite操作を停止する必要があります。
snapshotが不要である場合は、sharaku/snap-volumeを使用せず、シンプルなVOLUMEコンテナを使用しましよう。
以下のようにdocker imageをpullします。
docker pull sharaku/snap-volume
Docker imageを自分で構築することもできます。
git clone https://github.com/sharaku/docker-snap-volume.git
cd docker-snap-volume
docker build --tag="$USER/snap-volume" .
snap-volumeのimageを実行します。
docker run -d \
--name example-vol \
-v /path/to/data:/path/to/container/data:rw \
-v /path/to/snapshot:/opt/.snap:rw \
-e "SNAP_MAX=128" -e "SNAP_CRON=0 3 * * *" sharaku/snap-volume start data:/path/to/container/data
snap-volumeをコンテナに公開します。
docker run -d --volumes-from example-vol docker-image
-v /path/to/data:/path/to/container/data:rw :
永続的に保存するデータのディレクトリを指定します。
-v /path/to/snapshot:/opt/.snap:rw :
snapshot保存先ディレクトリを指定します。コンテナ内のsnapshotディレクトリは/opt/.snap固定です。
SNAP_MAX :
snapshotの世代数を指定します。ここで指定した以上のsnapshotは削除されます。指定しない場合は128が使用されます。
SNAP_CRON :
snapshot採取の時間を指定します。指定はcrontabと同一です。指定しない場合は0 3 * * * (GMT 03:00)が使用されます。各国のLOCALTIMEでないことに注意してください。
snap-volumeはCLIによって各種操作を提供します。CLIはdocker runの--linkオプションを使用して動作中のsnap-volumeに対して操作します。
docker run -t --rm=true \
-v /path/to/data:/path/to/container/data:rw \
-v /path/to/snapshot:/opt/.snap:rw \
--link=example-vol:snap-volume sharaku/snap-volume {start|help|show|snapshot|restore} [options]
helpコマンドのみ単独で使用できます。
docker run -t --rm=true sharaku/snap-volume help
snapshot採取を開始します。
cliのコマンド一覧を表示します
採取されたsnapshot一覧を表示します
最後にstartコマンドで開始したsnapshot情報を元にて手動でsnapshotを採取します
最後にstartコマンドで開始したsnapshot情報を元にてデータをsnapshotからリストアします
コンテナ内では/opt/.snap下に以下のディレクトリが作成されデータが管理されます。
@GMT-YYYY.MM.DD-hh.mm.ss形式のデータが保存されます。snap-volumeコンテナ起動時に/opt/.snapを-vオプションで指定することにより、snapshotの保存先を任意で変更できます。
mysqlのデータをホストの/export/data/mysqlへ保存し、snapshotを/export/.snapshot/mysqlへ採取する例です。
docker run -d \
--name mysql-vol \
-v /export/data/mysql:/var/lib/mysql:rw \
-v /export/.snapshot/mysql:/opt/.snap:rw \
sharaku/snap-volume start mysql:/var/lib/mysql
docker pull mysql
docker run -d \
--volumes-from mysql-vol \
-e "MYSQL_ROOT_PASSWORD=passwd" -p 3306:3306 mysql
-v /export/data/mysql:/var/lib/mysql:rwはホストの/export/data/mysqlディレクトリを/var/lib/mysqlとして指定しています。
その後、--volumes-from mysql-volにてmysqlコンテナへ公開されます。
-v /export/.snapshot/mysql:/opt/snap-vol:rwは/export/.snapshot/mysqlディレクトリをsnapshot格納先として指定しています。このディレクトリに対して、snapshotが格納されます。
mysqlのデータを特定の時刻に採取したsnapshotへリストアする例です
docker run -t \
-v /export/data/mysql:/var/lib/mysql:rw \
-v /export/.snapshot/mysql:/opt/.snap:rw \
sharaku/snap-volume show
リストアするsnapshotを決定
docker run -t \
-v /export/data/mysql:/var/lib/mysql:rw \
-v /export/.snapshot/mysql:/opt/.snap:rw \
sharaku/snap-volume restore @GMT-YYYY.MM.DD-hh.mm.ss
Content type
Image
Digest
sha256:889e5b759…
Size
59.6 MB
Last updated
almost 11 years ago
docker pull sharaku/snap-volume