サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 72 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次

【Dockerシリーズ】DockerのVolumes、Bind mounts、tmpfs mountsの違い。適切なタイプのマウントを選択

tin
tin
2023-02-25 / 0 コメント / 1 いいね! / 252 読み / 1,344 文字

背景

Dockerは、コンテナ内でデータを永続化するために、3つの異なるマウントタイプを提供しています:ボリューム(Volumes)、バインドマウンテン(Bind mount)、tmpfs mount。
以前はよくbind mountsを使うが、VolumesとTMPFSにはよくわからないため、調べました。

👇公式ドキュメント
https://docs.docker.com/storage/

1.Volumes、Bind mount、tmpfsについて

  • Volumes:Volumesはホストマシンのパスです。デフォルトでは、/var/lib/docker/volumes。Dockerプロセスまたrootユーザでない限り、このパスの下のファイルを変更できないため、データ永続化の一番安全なタイプと言われている。

  • Bind mounts:Bind mountsはホストマシンの任意のパスにデータを保存でき、Dockerプロセスでなくても変更できるため、セキュリティリスクがあると言われている。

  • tmpfs:ホストマシンのメモリにのみ保存され、コンテナが停止するとメモリ上から削除されてしまう。

2.共通点

Volumes、Bind mount、tmpfsのどちらでも、コンテナのデータをホストマシンに保存できる。

3.相違点

3-1. 保存場所

タイプ 保存場所
Volumes /var/lib/docker/volumes
Bind mounts ユーザ指定
tmpfs メモリ

3-2. データ安全性

タイプ 保存場所
Volumes Docker管理のため、安全性高い
Bind mounts 便利だけど、任意の指定& Docker管理されていないため、安全性の懸念がある
tmpfs コンテナが停止すると、データがなくなる。要注意!

3-2. コンテナ新規の際、VolumesとBind の違い

タイプ ホスト側のディレクトリ コンテナ側のディレクトリ コンテナ側の結果
Volumes 空白 空白 空白
Volumes 非空 空白 ホストの内容を取り込んで非空になる
Volumes 空白 非空 上書きされないで非空のまま
Volumes 非空 非空 異なる部分は上書きされ、異なる部分はホストから取り込む
Bind mounts 空白 空白 空白
Bind mounts 非空 空白 ホストの内容を取り込んで非空になる
Bind mounts 空白 非空 上書きされて空白になる ★
Bind mounts 非空 非空 ホストの内容で上書きされて非空 ★

3-2. コマンド

Volumes:2種類ある

例1:-v nginx-vol1:/usr/share/nginx/html:ro

コマンド 説明 備考
-v 固定文字 -
nginx-vol1 volumes名、自由に決める docker volume createで事前作成しない場合、コンテナを新規する際、自動で作成される。
/usr/share/nginx/html コンテナ側のディレクトリを指定 絶対パス
ro コンテナ側readonly読み取り専用 省略する場合はデフォルト値rw

例2:--mount type=volume,source=nginx-vol1,destination=/usr/share/nginx/html,readonly
例1の説明を参考

Bind mount:2種類ある

例1:-v /home/test/html:/usr/share/nginx/html:ro

コマンド 説明 備考
-v 固定文字 -
/home/test/html ホスト側のディレクトリを指定 絶対パス
/usr/share/nginx/html コンテナ側のディレクトリを指定 絶対パス
ro コンテナ側readonly読み取り専用 省略する場合はデフォルト値rw

例2:--mount type=bind,source=/home/test/html,destination=/usr/share/nginx/html,readonly
例1の説明を参考

TMPFS:2種類ある

例1:--tmpfs /app

コマンド 説明 備考
–tmpfs 固定文字 -
/app ホスト側のディレクトリを指定 絶対パス

例2:--mount type=tmpfs,destination=/app,tmpfs-size=1024,tmpfs-mode=1770

コマンド 説明 備考
–mount type=tmpfs 固定文字 -
destination=/app コンテナ側のディレクトリを指定 絶対パス
tmpfs-size サイズ指定 単位はbytes
tmpfs-mode ファイルのモードを指定 -

4.デモ

デモ概要:

今回はnginxを例として、
まず、なにもmountしない場合、nginxコンテナの初期状態を確認。
nginxコンテナの初期状態には:
/usr/share/nginx/htmlデータあり、
/usr/local/share/fontsデータなし。
そして、VolumesとBind のタイプを使って別々でコンテナを新規して、
htmlとfont両フォルダの結果を確認。

4-1. nginxコンテナの初期状態を確認

image-1677332458642

4-2. Volumesタイプ(データなし)2個を用意してコンテナを新規

image-1677465297808

4-3. Volumesタイプ(データあり)2個を用意してコンテナを新規

image-1677337831514

4-4. Bind タイプ(データなし)2個を用意してコンテナを新規

image-1677332559161

4-5. Bind タイプ(データあり)2個を用意してコンテナを新規

image-1677332575341

1
  • 1

コメント欄