Docker におけるデータ管理とマウントタイプ(volume・bind mount)
https://scrapbox.io/files/6578bf09146f20002393edac.png
https://matsuand.github.io/docs.docker.jp.onthefly/storage/
コンテナ内に作成されたファイル
コンテナー内に生成されたファイルは、デフォルトではすべて書き込み可能なコンテナーレイヤーに保存されます。
そのため。。。
コンテナが消えるとデータも消える
コンテナの書き込み可能レイヤーに保存されるので、データの移動が困難
コンテナーの書き込み可能レイヤーにデータを書き込むためには、ファイルシステムを管理する ストレージドライバー が必要
volumeとbind moumt
https://scrapbox.io/files/6578de0e2000a40023c7dab6.png
volume
Dockerにより管理生成されるもの。volumeを生成した際は、Dockerホスト上のディレクトリにvolumeが保存される。このvolumeをコンテナにマウントするとそのディレクトリがコンテナ内にマウントされるものとなる(ここはbind mountと同じ)。ただし、volumeはDocker によって管理されるものであって、ホストマシンの主要な機能からは切り離されている
bind mount
bind mountを利用する際には、ホストマシン上のファイルやディレクトリがコンテナにマウントされる(ここはvolume mountと同じ)。 そのファイルやディレクトリは、ホストマシン上のフルパスによって参照される
volumeによる高速化
volumeはホスト上ではなくLinux VM上に保存されるので高性能な I/Oが実現できる。
code:イメージ
+--<Host>----------+ +--<Docker>-------------------------------------+
| | | +--<Container:c1>---+ +--<Volume:v1>-----+ |
| | | | | | | |
| /hdir/--------------------> /c1-hdir/ | | | |
| /hfile.txt----------------> /c1-hfile.txt | | | |
| | | | | | | |
| | | +-------------------+ | | |
| | | | | |
| | | +--<Container:c2>---+ | | |
| | | | | | | |
| | | | /c2-v1/ <-----------------/ | |
| | | | | | | |
| | | | | | | |
+------------------+ | +-------------------+ +------------------+ |
| |
| +--<Container:c3>-------------------------+ |
| | c1,c2 と同じものが同じ場所にマウントされる | |
| | /c1-hdir/ | |
| | /c1-hfile.txt | |
| | /c2-v1/ | |
| +-----------------------------------------+ |
+-----------------------------------------------+
https://zenn.dev/aldagram_tech/articles/110bc79925d41b
https://zenn.dev/reizt/articles/6a4847be84cc4f
https://qiita.com/gounx2/items/23b0dc8b8b95cc629f32