はじめに
Dockerを使って開発を進めていると、「ホスト側のファイルをコンテナ内で即時反映したい」という場面が多々あります。
例えば、Webアプリのコードを修正するたびに docker build
していたら時間がかかりますよね。
そこで登場するのが「Bind Mount(バインドマウント)」です。
本記事では、
- Bind Mountの基本概念
- Volumeとの違い
- 実際のハンズオン(Nginx + HTML編集)
- 開発での活用パターン
を順に解説します。
Bind Mountとは?
Bind Mount は、ホストマシン上のディレクトリやファイルを、コンテナの内部に「そのまま」マウント(共有)する機能です。
特徴
- リアルタイム同期:ホスト側でファイルを変更すると、コンテナ内にも即時反映されます。
- ビルド不要:ファイル修正のたびに
docker build
しなくても済む。 - 柔軟性:任意のディレクトリを指定できる。
イメージ図
[ホスト側]
/home/user/project/index.html
↓
[コンテナ側]
/usr/share/nginx/html/index.html
ホスト上のファイルをコンテナ内部の特定パスに「リンク」するイメージです。
Volumeとの違い
項目 | Bind Mount | Named Volume |
---|---|---|
データの場所 | ホストの任意パス | Dockerが管理する場所(/var/lib/docker/volumes/... ) |
データの管理 | 手動(パス指定) | 自動(Docker管理) |
主な用途 | 開発時にホットリロード | 本番用のデータ永続化 |
セキュリティ | ホストへの直接アクセス | Docker管理でやや安全 |
開発中は Bind Mount が便利ですが、本番環境では Named Volume を使うのが一般的です。
ハンズオン:NginxでBind Mountを体験する
ここでは、Nginxの公式イメージを使い、ホスト側でHTMLを編集 → コンテナに即時反映 する例を体験します。
1. 作業ディレクトリを用意
mkdir ~/nginx-bind-test
cd ~/nginx-bind-test
2. サンプルHTMLを作成
echo "<h1>Hello from Host</h1>" > index.html
3. Bind MountでNginxを起動
docker run -d \
--name nginx-bind-demo \
-p 8080:80 \
-v $(pwd)/index.html:/usr/share/nginx/html/index.html \
nginx
-v ホスト側:コンテナ側
がBind Mountの指定です。$(pwd)
は現在のディレクトリを表します。
4. ブラウザで確認
http://localhost:8080
にアクセスすると、
「Hello from Host」と表示されるはずです。
変更をリアルタイム反映してみる
ホスト側の index.html
を編集してみましょう。
echo "<h1>Updated from Host!</h1>" > index.html
ブラウザをリロードすると、即座に変更が反映されます。
これがBind Mountの真骨頂です。
補足:ディレクトリ単位でマウントも可能
複数ファイルを扱う場合、ディレクトリごとマウントできます。
docker run -d \
--name web-dev \
-p 8081:80 \
-v $(pwd):/usr/share/nginx/html \
nginx
これでカレントディレクトリ全体が /usr/share/nginx/html
に同期されます。
トラブルシューティング
パーミッションエラーが出る場合
ホストのファイル権限を確認しましょう。
chmod 644 index.html
また、SELinuxが有効な環境(例:CentOS)では以下のようにオプションを付ける必要があります:
-v $(pwd)/index.html:/usr/share/nginx/html/index.html:Z
開発での実用例
シナリオ | 例 |
---|---|
Webアプリ開発 | Node.jsやFlaskのコードをリアルタイム反映 |
設定検証 | NginxやApacheの設定ファイルをホストで編集 |
ログ監視 | /var/log ディレクトリをマウントしてリアルタイム確認 |
Bind Mountは、開発効率を上げる「ライブ開発」環境 を作るのに最適な仕組みです。
まとめ
項目 | ポイント |
---|---|
概念 | ホスト上のファイルをコンテナ内に直接リンク |
利点 | 即時反映・ビルド不要で高速開発 |
注意点 | 本番ではVolumeを推奨、権限管理に注意 |
代表例 | -v $(pwd):/app のように使用 |
Bind Mountを理解すれば、Docker開発が一気にスピードアップします。
次は docker-compose.yml
でBind Mountを定義して、自動起動環境を構築するのもおすすめです。
コメントを残す