参考: https://docs.docker.com/engine/tutorials/dockervolumes/
docker create, runでの-v
オプション指定時
$ docker create -v /usr/src/app --name ${container_name} busybox
などど実行した際に、-v
オプションで指定したパスへのdata volumeが暗黙的に作成される。
data volumeを明示的に作成
$ docker volume create --name hoge_volume
この時、data volumeに使用するdriver pluginがインストール済みであればそれを指定することができ、NFS等を利用したdata volumeの作成も可能になる。(ただしdriverがその環境でinstallできるかは別なので注意)
SEE: https://docs.docker.com/engine/extend/legacy_plugins/#/volume-plugins
data volumeの確認
docker volume ls
で一覧
コンテナを指定して使用しているdata volumeを調べたい場合は以下のようにすれば、volumeの名前を取得できる。
$ docker inspect -f "{{range .Mounts}}{{.Name}}{{end}}" ${container_name}
a0a725e99b55e150ecedafc2f2bcc51f4780d728695a2d5b20d70647eabea74e
data volumeの削除
docker rm ${container_name}
の際に-v
オプションを付けない場合、data volumeは削除されない。
つまり、存在が残るので、docker create
等の際に-v ${data_volume_name}:/usr/src/app
などと指定すれば再度マウントすることも可能。
data volume自体を指定して削除する場合はdocker volume rm ${data_volume_name}
とする。
docker composeで使う
docker-compose.yml
をversion 2形式にした場合、volumes
というkey以下に、data volumeを定義することができる。
これを利用して、永続化したdata volumeを各サービスにマウントすることができる。
version: '2'
volumes:
app:
driver: 'local'
mysql:
driver: 'local'
services:
mysql:
# 中略
volumes:
# ${volumesに定義したkey}:{マウントパス}
- mysql:/var/lib/mysql
app:
# 中略
volumes:
- app:/usr/src/app/
上記でcreate
を実行した際に、以下のようなdata volume群が作成される。
$ docker volume ls
local ${compose_name}_app
local ${compose_name}_mysql
また、この場合もdata volumeは暗黙的に削除されることはなく、docker-compose down -v
, docker-compose rm -v
など-v
オプションを指定することによって削除される。
data volumeを使えば永続化するためのdata containerは不必要。
ただし、data containerを使用すればdata volumeをまとめておいて、あとで一括で削除、というのもできる(っていうニーズがあるか…?)ので、状況によっては作る必要性はありそう。