Docker | 2週間で実務レベルに到達するDocker学習:開発効率化(マウント)(Day5)

Docker Docker
スポンサーリンク

Day5:開発効率化(マウントとホットリロードの本質)

Day5では、Dockerを「開発で本当に使えるレベル」に引き上げます。
今日のテーマは マウント(Volume)ホットリロード
これを理解すると、Dockerを使いながらも、普段どおりのスピードで開発できるようになります。

結論から言うと、
「ホストのコードをコンテナにリアルタイムで同期する」
これが Day5 の核心です。


マウントとは何か(初心者が最初に理解すべき本質)

コンテナの中に“ホストのフォルダをそのまま映し込む”仕組み

コンテナは本来、独立した世界です。
そのため、コンテナの中にあるファイルを変更しても、ホスト側には反映されません。
逆に、ホスト側のコードを変更しても、コンテナの中には届きません。

そこで登場するのが マウント(Volume) です。

マウントを使うと、
ホストのフォルダをコンテナのフォルダとして使えるようになる
という魔法のような状態が作れます。


docker run -v $(pwd):/app node の意味を深く理解する

コマンド全体の役割

docker run -v $(pwd):/app node

これは
「ホストの現在のフォルダを、コンテナの /app にマウントして Node.js を起動する」
という意味です。

ここから、各部分を丁寧に分解します。


$(pwd):ホスト側の現在のフォルダ

Mac/Linux の場合の書き方

$(pwd) は
「今いるディレクトリの絶対パス」
を表します。

例えば、
/home/user/myapp
にいるなら、$(pwd) はそのままそのパスになります。

Windows の場合は書き方が少し違いますが、概念は同じです。


/app:コンテナ側のフォルダ

コンテナの中に作られる作業ディレクトリ

コンテナの中には /app というフォルダが作られ、
そこにホスト側のフォルダが丸ごと映し込まれます。

つまり、
ホストの myapp フォルダ

コンテナの /app フォルダ
という関係が成立します。


マウントがもたらす最大のメリット:ホットリロード

コードを変更した瞬間にコンテナ側にも反映される

マウントを使うと、
ホスト側で app.js を保存した瞬間、
コンテナの /app/app.js も同時に更新されます。

これにより、
「コードを変更 → コンテナ内のアプリが即反映」
という開発体験が実現します。

Dockerを使っているのに、
まるでローカルで直接開発しているかのようなスピード感になります。


ホットリロードを実現するための実践例(Node.js)

nodemon を使うと最強になる

Node.js の場合、
ファイル変更を検知して自動で再起動してくれる nodemon を使うと、
ホットリロードが完全に機能します。

コンテナ内で nodemon を使う例は次のようになります。

docker run -v $(pwd):/app -w /app node npx nodemon app.js

ここで -w /app は
「コンテナの作業ディレクトリを /app にする」
という意味です。

これで、
ホストで app.js を保存するたびに、
コンテナ内のアプリが自動で再起動します。


Python の場合のホットリロード

Python なら Flask や FastAPI の開発サーバが自動リロード機能を持っています。

例えば FastAPI なら uvicorn の –reload オプションを使います。

docker run -v $(pwd):/app -w /app python uvicorn app:app --reload --host 0.0.0.0 --port 8000

これで Python でもホットリロードが実現します。


マウントを使うときの注意点(実務レベルの視点)

コンテナの中でファイルを変更してはいけない

マウントしている場合、
コンテナ側でファイルを編集すると、
ホスト側のファイルも書き換わります。

これは意図しない破壊につながるため、
実務では コンテナ内で編集しない のが鉄則です。


マウントと COPY の違いを理解する

COPY は「イメージに取り込む」

マウントは「ホストのファイルをそのまま使う」

Dockerfile の COPY は、
イメージを作るときにファイルを取り込みます。

一方、マウントは、
イメージには取り込まず、ホストのファイルをリアルタイムで参照する
という違いがあります。

開発中はマウント、
本番環境では COPY、
という使い分けが一般的です。


Day5のゴール:「コード変更→即反映」を実現できる

ここまで理解できれば、
Dockerを使った開発でも、
ローカル開発と同じスピードで作業できます。

Dockerは「本番環境のための技術」と思われがちですが、
マウントを使うことで 開発環境としても非常に強力 になります。


次のステップ

Day6では、
Docker Compose を使って複数コンテナを同時に管理する方法
に進むことができます。

データベースとアプリを同時に立ち上げる、
ネットワークを自動で構築する、
環境変数をまとめて管理する、
といった実務的な内容に踏み込みます。

タイトルとURLをコピーしました