はじめに
バインド マウント(bind mount)は、LinuxやDockerでデータの共有や効率的なファイルアクセスを実現する便利な仕組みです。
特にDockerではホストとコンテナ間でデータをやり取りする際に頻繁に利用されます。
本記事は、その内容を自分用の備忘録としてまとめたものです。走り書き程度のメモとなりますが、何卒ご容赦ください。
書こうと思ったきっかけ
概念自体はなんとなく理解していたものの、それを相手に伝えたり、自分の言葉で言語化して使うことができていないと感じました。
そのため、苦手なことや言語化が難しいことについては、積極的に記事としてアウトプットしていこうと思い、今回書くことにしました。
バインド マウント(bind mount)とは?
バインド マウント(bind mount)とは、LinuxやDockerで使用されるファイルシステムの概念の1つで、特定のディレクトリやファイルを他の場所にマウントする仕組みです。
これにより、同じデータに複数の場所からアクセスできるようになります。
バインド マウント(bind mount)の仕組み
通常のマウント:
- ファイルシステム(例: USBデバイス)を特定のディレクトリに関連付けて使用します。
- 例:
/dev/sda1
を/mnt/usb
にマウント。
バインドマウント:
- 既存のディレクトリやファイルを、別の場所に「参照」としてマウントします。
- 実体は1つですが、異なるディレクトリから同じデータにアクセス可能。
バインド マウント(bind mount)のメリット
-
共有データ:
- 同じデータに複数のディレクトリからアクセスできる。
- Dockerではホストとコンテナ間のデータ共有に便利。
-
柔軟性:
- ディレクトリ構造を変更せずに、必要な場所にデータを参照可能。
-
高速:
- シンボリックリンクよりも高速に動作。
実際に使ってみた
ここでは、LinuxとDockerでのバインド マウント(bind mount)の例を具体的に説明します。
Linuxでの例
以下は、Desktopディレクトリを使用してディレクトリをバインドマウントする例です。
- 元のディレクトリを準備:
まず、Desktop上に元となるディレクトリとファイルを作成します。
mkdir ~/Desktop/original
echo "Hello, Bind Mount!" > ~/Desktop/original/example.txt
- 別のディレクトリにバインドマウント:
次に、バインド先となるディレクトリを作成し、マウントします。
mkdir ~/Desktop/bind-mount
sudo mount --bind ~/Desktop/original ~/Desktop/bind-mount
- 動作確認:
-
~/Desktop/bind-mount/example.txt
を開くと、~/Desktop/original/example.txt
と同じ内容が表示されます。 - データをどちらで更新しても、変更は即座に反映されます。
-
実際の検証結果
[honda@HONDA-TEST ~]$ cat Desktop/bind-mount/example.txt
Hello, Bind Mount!
Hello, Bind Mount!
Hello, Bind Mount!
[honda@HONDA-TEST ~]$ cat Desktop/original/example.txt
Hello, Bind Mount!
Hello, Bind Mount!
Hello, Bind Mount!
- アンマウント:
バインドマウントを解除するには、以下のコマンドを実行します。
sudo umount ~/Desktop/bind-mount
Dockerでの例
Dockerでもバインド マウント(bind mount)はよく使われます。以下はコンテナでホストディレクトリをバインドする例です。
docker run -d \
--name my-container \
-v /host/path:/container/path \
ubuntu
-
-v /host/path:/container/path
:- ホストの
/host/path
をコンテナ内の/container/path
にバインドマウントします。 - コンテナ内で作業した内容はホストに反映され、逆も可能です。
- ホストの
注意点:
-
削除の影響:
実体データが1つなので、元のデータを削除するとバインド先からもアクセスできなくなります。 -
パーミッション:
マウント先でも元のディレクトリの権限が適用されます。 -
コンテナでの注意:
バインドマウントを使うとホスト側が影響を受けるため、誤操作に注意。
まとめ
最後まで読んでいただき、ありがとうございました。今回の記事では、自分の中でも曖昧だった知識を改めて整理し、言語化する形でまとめてみました。
本記事の内容はインターネット上の文献などを参考に作成していますが、あくまで個人の備忘録としての位置づけです。その点をご了承ください。
これからも分からないことに積極的に向き合い、アウトプットを通じて理解を深めていきたいと思います。