はじめに
Dockerのマウント3種類(Volumes
、bind mounts
、tmpfs mounts
)について、
公式リファレンスを読んで、以下の項目をまとめたものになります。
- マウントされたデータの保存先について
-
Volumes
、bind mounts
、tmpfs mounts
の概要 -
Volumes
、bind mounts
、tmpfs mounts
の使用例
マウントの種類によるデータの保存先
マウントの種類によらず、コンテナ内からは同じようにデータが見えます。
コンテナのファイルシステム内のディレクトリまたは個別のファイルとして公開されます。
3種類のマウントの違いについて考える上で、ポイントとなるのはデータがDockerホストのどこにあるかを考えることです。
-
Volumes
は、Docker(Linuxでは/ var / lib / docker / volumes /
)によって管理されるホストファイルシステムの一部に保存されます。Dockerを使用したプロセス以外の場合では、Dockerによって管理されるファイルシステムを変更しないでください。Volumes
は、Dockerでデータを保持するための最良の方法です。 -
bind mounts
は、ホストシステムのどこにでも保存できます。DockerホストまたはDockerコンテナ上の非Dockerプロセスは、いつでも変更できます。 -
tmpfs mounts
はホストシステムのメモリにのみ保存され、ホストシステムのファイルシステムには書き込まれません。
それぞれマウントタイプについて
Volumes
について
-
Volumes
が作成されると、Dockerホストのディレクトリに保存されます。 -
Volumes
がコンテナにマウントされると、このディレクトリはコンテナにマウントされます。 -
bind Mount
と違って、Volumes
はDockerによって管理され、ホストマシンのコア機能から分離されます。 -
特定の
Volumes
は複数のコンテナに同時にマウントできます。 -
実行中のコンテナがボリュームを使用していない場合でも、ボリュームは引き続き使用でき、自動的に削除されません。
-
docker system prune
で削除することができます。
-
Bind mounts
について
Bind mounts
はVolumes
と比較して機能が限られています。
-
Bind mounts
を使用すると、ホストマシン上のファイルやディレクトリはコンテナにマウントされます。 - マウント対象のファイルやディレクトリはホストマシン上の絶対パス(
full path
)によって参照されます。
tmpfs mounts
について
tmpfs mount
はDockerホストあるいはコンテナ内のディスクのどちらにも保持されません。
コンテナが作成され削除されるまでの間に、非永続的な状態または機密情報を保存することができます。
マウントの使用例
Volumes
の使用例
-
複数の実行中のコンテナ間でデータを共有したい場合。
- 複数のコンテナが読み取り専用か読み書きのいずれかで、同時にマウントできる
-
Dockerホストが特定のディレクトリまたはファイル構造を持つことが保証されていない場合。
- ホストのファイルやディレクトリ等の構成を実行中のコンテナから分離することが
Volumes
にはできます。
- ホストのファイルやディレクトリ等の構成を実行中のコンテナから分離することが
-
ローカルではなく、リモートホストやクラウドプロバイダーに保存する場合
-
あるDockerホストから別のDockerホストにデータを移行、復元、バックアップしたい場合。
Bind mounts
の使用例
一般にできるだけVolumes
を使用すべきと公式リファレンスでは述べられています。
以下のユースケースにbind mounts
が適していると記述されています。
-
ホストマシンからコンテナへの構成(ファイルやディレクトリ構成)を共有したい場合。
- ホストマシンから各コンテナに
/etc/resolv.conf
をマウントすることにより、DockerがデフォルトでコンテナにDNS解決を提供することができます。
- ホストマシンから各コンテナに
-
ソースコードや作成したアーティファクトをDockerホストとコンテナ間で共有したい場合。
- 例えば、Mavenの
target/
ディレクトリをマウントした場合に、DockerホストでMavenプロジェクトをビルドするたびにコンテナは再構築されたアーティファクトにアクセスします。
- 例えば、Mavenの
-
Dockerホストのファイルやディレクトリ構成が、コンテナが必要とするバインドマウントに一致することが保証されている場合。
tmpfs
マウントの使用例
-
tmpfs
マウントはデータをホストマシンかコンテナ内でも保持したくない場合。- これはセキュリティ上の理由か、大量の非永続化データを書き込む必要がある場合にコンテナのパフォーマンスを保護するためです。