前提
- 「ホストマシンの記憶領域でコンテナのデータを扱うための方法」を対象とする
- ホストマシンのストレージ
- ホストマシンのメモリ領域
- 「コンテナの読み書き可能レイヤーへのデータの書き込み」は扱わない
volume
- ホストマシンのストレージ上に、Dockerが管理する記憶領域を定義する
- 異なるホストマシンのコンテナ同士でボリュームを共用することはできない
- volumeに名前をつけて管理することができる
- 複数のコンテナが1つのvolumeを使うことができる
- volumeの内容は、volumeを使用しているコンテナを削除しても消去されない
- volumeの内容を消去するためには、明示的に消去の処理を行う必要がある
- ホスト側におけるディレクトリの作成先は固定されている
- volumeの内容については、Dockerによって管理される
- ホスト上でvolumeの内容を直接操作することは想定されていない
volumeの用途
- 1つのデータを複数のコンテナで共通使用する場合
bind mount
- ホストマシンの任意のディレクトリとコンテナの任意のディレクトリを接続する
- 複数のコンテナが1つの
- bind mountが設定されたディレクトリの内容については、Dockerは何ら関与せず、ホスト側で任意に変更することができる
- マウント先のディレクトリ構成
- マウント先のファイル内容
- Docker社としては、明確な理由がない限り、上記のvolumeを使用することを推奨している
- 以下の用途に該当する場合がbind mountの使い所
bind mountの用途
- コンテナの構成をホストマシン側から共有したい場合
- ソースコードやコンテナの成果物をコンテナとホストマシンで共有したい場合
tmpfs
- ホストマシンのメモリ領域とコンテナのディレクトリを接続する
- volumeやbind mountとは異なり、永続的な記憶領域ではない
- コンテナを停止、あるいは再起動した時点でtmpfsの内容は消去される
- ホストマシンを停止、あるいは再起動した時点でもtmpfsの内容は消去される
tmpfsの用途
- 永続化を望まないデータの記憶領域
- 一時ファイル
- 機密情報(ワンタイムパスワード等)