はじめに
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マウントはデータをホストマシンかコンテナ内でも保持したくない場合。- これはセキュリティ上の理由か、大量の非永続化データを書き込む必要がある場合にコンテナのパフォーマンスを保護するためです。