117
104

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Dockerのマウント3種類についてわかったことをまとめる

Posted at

はじめに

Dockerのマウント3種類(Volumesbind mountstmpfs mounts)について、
公式リファレンスを読んで、以下の項目をまとめたものになります。

  • マウントされたデータの保存先について
  • Volumesbind mountstmpfs mountsの概要
  • Volumesbind mountstmpfs 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 mountsVolumesと比較して機能が限られています。

  • 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プロジェクトをビルドするたびにコンテナは再構築されたアーティファクトにアクセスします。
  • Dockerホストのファイルやディレクトリ構成が、コンテナが必要とするバインドマウントに一致することが保証されている場合。

tmpfsマウントの使用例

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
117
104

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?