Dockerボリューム
基本
ボリュームとは永続化したいデータを置く場所のこと。コンテナとは切り離して管理したいデータを置く。複数のコンテナから同じボリュームを利用することもできる。
ボリュームは以下の3種類ある。
- ホスト(host)
- 匿名(anonymous)
- 名前付き(named)
ホストボリューム
$ docker container run -dit -v $HOME/tmp:/tmp alpine sh
ホストの$HOME/tmpとコンテナ内の/tmpがボリュームとなっている。コンテナを停止・削除しても、/tmpの内容は$HOME/tmpに残る。
docker volume lsでは表示されない。
匿名ボリューム
$ docker container run -dit -v /tmp alpine sh $ docker volume ls DRIVER VOLUME NAME local 3c9ec9bd1c9acfd189cc4ea6d9bb7cb537b8bb94af071d72fbe2ba3af8a66559
Dockerが隠蔽して管理するボリュームで、ハッシュ値がボリューム名となる。docker container run --rm
で起動したコンテナが削除されるとき、匿名ボリュームも削除される。
名前付きボリューム
$ docker container run -dit -v tmp:/tmp alpine sh $ dv ls DRIVER VOLUME NAME local tmp
Dockerが隠蔽して管理するボリューム。名前で指定できるので扱いやすいほか、docker container run --rm
で起動したコンテナが削除されても、名前付きボリュームは残る。
docker volume create
で名前付きボリュームを作成できる。また指定した名前ボリュームがなかったときは自動で作られる。
ボリュームにファイルがあると?
ボリュームにファイルあり、コンテナになし
ボリュームのファイルがコンテナにコピーされるボリュームにファイルなし、コンテナにあり
コンテナのファイルがボリュームにコピーされる両方にファイルあり
コンテナのファイルがなくなり(?)、ボリュームのファイルがコンテナにコピーされる
docker-compose.ymlでの設定方法
Compose file version 3 reference | Docker Documentation
- 各サービスで名前付きボリュームを使うのであれば、トップレベルのvolumesにも記述する。
- external: trueとしないと、docker-composeが作る{project}_{volume}というボリュームが使われる。