まだらもよう

Qiitaに投稿できないメモ書きなど

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}というボリュームが使われる。