Container is environment
概念上是把 環境 抽離出你的電腦,讓專案去哪裡跑都長一樣,不再被本機設定搞壞,此時我們可以透過 Docker container 取代「本機安裝 Node.js」,來提供一致的開發環境

- 本機先裝 Node.js
- 進專案資料夾
- 跑
npm install - 跑
npm start
雖然在自己的電腦開完了,但自己的電腦要裝 Node 18、同事可能裝 Node 16、CI/CD 用 Node 20

現在改成 Docker 做的事
1 |
|
container 本身通常是短暫的,用完就刪。但你的 React 原始碼不能跟著消失,所以要把本機資料夾掛進 container。這樣你在 container 裡改動、安裝依賴,本機資料夾也會看到結果

我們執行 Docker 時加上
1 | -v "${PWD}:/app" |
${PWD} 是「你本機的資料夾」/app 是「container 裡的路徑」

Docker 做的事是把這兩個路徑 “接在一起”,接起來之後
- container 看到 /app 裡的檔案 = 其實就是你本機的檔案
- container 在 /app 新增檔案 = 本機也會出現
- container 修改檔案 = 本機同步被改

所以在 container 裡跑 npm install
實際發生的是 node_modules 被安裝在 /app,而 /app 其實是本機資料夾,所以本機就會看到 node_modules
假設本機是 Node 20 而 Docker 用的是 node:18
1 | docker container run -v "${PWD}:/app" node:18 npm install |
- 安裝行為 → 用 Node 18 規則
- node_modules → 寫在你本機
所以 node_modules 是「用 Node 18 算出來的結果」,即使本機是 Node 20,也完全沒參與


All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.



