Dockerでのデータ永続化 -その2-
昨日の続き。
今回はちゃんとDocker 1.10.3
を使ってやる。
docker volume
コマンド
Docker 1.9.0
からデータボリュームコンテナを管理できるvolume
コマンドが追加されている。
# docker volume --help Usage: docker volume [OPTIONS] [COMMAND] Manage Docker volumes Commands: create Create a volume inspect Return low-level information on a volume ls List volumes rm Remove a volume
何もしていない状態でのホスト側ディレクトリを見てみる。
# ls /var/lib/docker/volumes
当然何もない。
では、早速追加してみる。
# docker volume create --name test_volume
test_volume
確認用のコマンドもせっかくだから叩く。
# docker volume ls DRIVER VOLUME NAME local test_volume # docker volume inspect test_volume [ { "Name": "test_volume", "Driver": "local", "Mountpoint": "/var/lib/docker/volumes/test_volume/_data" } ]
/var/lib/docker/volumes
配下にtest_volume
ができている。
今のところ、volume driver
が何なのかいまいちわからない。
Volume Pluginってのがあるらしい。。。
# ls /var/lib/docker/volumes
test_volumes
コンテナにマウントして、inspect
でみてみよう!
# docker run -d -h centos7 -v test_volume:/volume centos /bin/bash # echo "tricotいいですよ" > /volume/test.txt ->あとで使う (Ctrl+p Ctrl+qでコンテナからデタッチ) # docker inspect <id> | grep -i volume VolumesFrom": null, "Name": "test_volume", "Source": "/var/lib/docker/volumes/test_volume/_data", "Destination": "/volume",
前回と同様、ファイルを作成すればホスト側から確認することができる。
volume
コマンドができて変わったことって、データボリュームコンテナを別途管理できるようになったことなのかな?
バックアップ/リストア
データボリューム内のデータをバックアップする場合は、バックアップ実行用のコンテナを別途用意する必要がある。。。らしい。
# mkdir bkp && cd bkp # docker run --rm -v test_volume:/volume -v $(pwd):/bkp centos tar cvf /bkp/test.tar /volume tar: Removing leading `/' from member names /volume/ /volume/test.txt # ls test.tar
確かにtarボールができているので、展開する。
# tar xvf test.tar volume/ volume/test.txt # ls test.tar volume # cat volume/test.txt tricotいいですよ
リストアするときは逆のことをするだけ
# docker run --rm -v test_volume:/volume -v $(pwd):/bkp centos bash -c "cd /volume && tar xvf /bkp/test.tar --strip 1"
消えたら不味いデータをDockerで扱ってても、これで安心です!!
一通り試した後
- データボリュームとデータボリュームコンテナの違いってなんだろう
- データボリュームというひとつのファイルシステムをコンテナとして扱うか否かの違いかと思う
- ボリュームコンテナって結局コンテナじゃないの?いらなくなったらポイできるのがコンテナのメリットだと思ってたけど。。
- コンテナはコンテナだけど、「データの永続化を目的としたもの」としてポイっとしない
- データを保持したいならホストのディレクトリにマップしたほうが管理もしやすいのでは?
- ホストのディレクトリでも別に構わないけど、ホストが汚れるし管理しにくそう。
docker volume
コマンドでコンテナとして一覧管理できるところがよさげだし、/var/lib/docker/volumes
配下に隔離できるのもメリットかもしれない。
- ホストのディレクトリでも別に構わないけど、ホストが汚れるし管理しにくそう。
開発段階でホスト-コンテナ間のファイルのやり取りを頻繁に実施するならディレクトリに、定期的にバックアップしたりするデータの保存域が欲しいかつホストを汚したくない場合はデータボリュームコンテナで、という感じでしょうか。。。
個人的にはどっちでもいい気がしたのであった。