Data Volumeとは
Dockerにおいてデータの永続化は気にしなかればならない問題です。
そこで使われるのが、Data Volumeです。Data VolumeはDockerコンテナ-ホスト間で直接ディレクトリを共有することで、データ永続化を実現する仕組みです。Data Volumeはコンテナを破棄してもホスト側に保持されることになります。
コンテナのデータ永続化手法としては、Data Volumeコンテナの手法が推奨されています。
こちらでは、コンテナ間でディレクトリを共有することになります。Data Volumeコンテナは、データのみを保持するためのコンテナで、ホスト側に保持された永続化データの一部をVolumeとして別のコンテナに共有できるようにしたものです。
Data VolumeコンテナのVolumeは、ホスト側の/var/lib/docker/volumes/
(管理領域)以下に配置されます。
ボリューム作成
$ docker volume create --name <VOLUME NAME>
一覧表示
$ docker volume ls
DRIVER VOLUME NAME
local 0a990e22051c0815c18cb10ae5eea84ce37db2e91e83c3e976d54646c466c249
...<omitted>...
local mysql-data
マウント
$ docker run [options] -v {Host directory}:{Container directory} <Repository>[:tag] [Command] [Arguments]
# 例)
$ docker run -d --name mysql -p 3306:3306 -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password mysql
削除
$ docker volume rm <VOLUME NAME>
全て削除
$ docker volume rm $(docker volume ls -qf dangling=true)
リンク切れのみ削除
$ docker volume ls -qf dangling=true | xargs -r docker volume rm
-
[Command A] | xargs [Command B]
: コマンドAの実行結果を引数にしてコマンドBを実行 -
-r
option : 標準入力(引き数)が空の場合はコマンドBを実行しない
データのエクスポート
Data Volumeコンテナで利用しているデータを他のコンテナで利用したい場合、一度データをエクスポートしたいとなるはずです。
Volumeデータをホスト側にエクスポートする方法を記載します。
$ docker container run -v $PWD:/tmp \
--volumes-from mysql-data \
busybox \
tar cvzf /tmp/mysql-backup.tar.gz /var/lib/mysql
上記例では、以下のようなイメージです。
- mysql-data(Data volumeコンテナ)の
/var/lib/mysql
の中身をtar圧縮 - 圧縮したファイルをbusyboxコンテナの
/tmp
以下にmysql-backup.tar.gz
として保存 - busyboxコンテナの
/tmp
をHost側のカレントディレクトリにマウント