本文へスキップ
BecomeCoder

Dockerコース · 第6章 データを残す · レッスン21

バインドマウント ― ホストのフォルダを直接見せる

ブラウザで完結

導入

ボリュームと似て非なるものに、バインドマウント があります。こちらは「ホスト(自分のPC)の特定のフォルダを、コンテナの中に直接見せる」やり方です。開発中に「コードを編集したら即コンテナに反映」させたいときの定番です。

説明

書き方は -v で同じですが、左側がパス(/./ で始まる)か、名前か で意味が変わります。

flowchart TD
    A["-v dbdata:/data<br/>左が『名前』"] --> B["名前付きボリューム<br/>Dockerが管理する保管庫"]
    C["-v ./site:/usr/share/nginx/html<br/>左が『パス』"] --> D["バインドマウント<br/>ホストの実フォルダを直結"]

たとえば、いま編集している Web サイトのフォルダ ./site を、nginx が配信する /usr/share/nginx/html に直結します。

docker run -d -v ./site:/usr/share/nginx/html -p 8080:80 --name web nginx

こうすると、ホスト側で ./site/index.html を書き換えた瞬間、コンテナ内の配信内容も変わります(コンテナを作り直さなくていい)。開発のイテレーションが一気に速くなります。

2つの使い分けを整理しておきましょう。

名前付きボリュームバインドマウント
書き方-v dbdata:/data-v ./site:/app
実体の場所Docker が管理(隠れた場所)ホストの指定フォルダそのもの
得意な用途本番のデータ(DB・アップロード)開発(ソースコードの即時反映)
中身の見え方docker volume で管理ふつうのフォルダとして直接見える

docker inspect web で確認すると、"Type"volume ではなく bind になっているのが分かります。

docker inspect web

どちらを使うか迷ったら:消えたら困る本番データは名前付きボリューム手元で編集して即反映したい開発中のコードはバインドマウント、と覚えておけば大きく外しません。

やってみよう

  • docker run -d -v ./site:/usr/share/nginx/html -p 8080:80 --name web nginx を実行しましょう。
  • docker inspect web"Mounts" を見て、"Type": "bind" になっていることを確認してください(レッスン20の volume との違いに注目)。

実際に動かしてみよう

下の端末に docker コマンドを打って Enter を押すと、その場で結果が返ります。本文の手順を実際になぞりながら進めましょう(各レッスンは毎回まっさらな状態から始まり、「最初からやり直す」でいつでも戻せます)。

Docker(シミュレート)

ブラウザ内で docker コマンドを試せる学習用環境を読み込みます(本物のDockerではなく、動きを再現したものです)。
スクロールして表示された時点でも自動で読み込まれます。