最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Docker進行node開發(fā)時實現(xiàn)熱加載功能

 更新時間:2024年09月29日 10:36:23   作者:冷夜星光  
這篇文章主要介紹了使用docker進行vue、react或者node開發(fā)時實現(xiàn)熱加載功能,即宿主機文件修改之后實時刷新或者實時重啟服務(wù),文中通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下

說明:使用docker進行vue、react或者node開發(fā)時實現(xiàn)熱加載功能,即宿主機文件修改之后實時刷新或者實時重啟服務(wù)。

不使用docker

本地開發(fā)node程序的時候只需要配置 nodemon 啟動就可以了,例如
假設(shè)你有一個簡單的 Node.js 文件,名為 app.js,內(nèi)容如下:

const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, {'Content - Type': 'text/plain'});
    res.end('Hello, World!\n');
});

server.listen(3000, () => {
    console.log('Server running on port 3000');
});

然后只需要運行以下命令

npm install -g nodemon
nodemon app.js

此時,當(dāng)你修改 app.js 文件內(nèi)容之后,nodemon 就會檢測到文件變化并自動重啟服務(wù)器,刷新頁面之后你就能立即看到修改后的效果。

使用docker

docker版本為 Docker version 27.1.1, build 6312585 ,且已經(jīng)配置好 dockerfile 文件的基礎(chǔ)之上。實現(xiàn)本地文件與容器內(nèi)文件的同步有多種方法。在這兒只介紹在compose.yaml配置的兩種方法,分別是:

1. 使用 watch 同步配置(推薦):

services:
  server:
    build:
      context: .
    ports:
      - 3000:3000
    develop:
      watch:
        - path: ./package.json  # 監(jiān)聽當(dāng)前目錄下的package.json文件
          action: rebuild  # package.json文件變化時docker會重新構(gòu)建,與docker compose up --build等效
        - path: .   # 監(jiān)聽當(dāng)前目錄
          target: /usr/src/app  # 容器中的目標(biāo)路徑,將宿主機的當(dāng)前目錄與容器內(nèi)的/usr/src/app路徑相關(guān)聯(lián)
          ignore:   # 忽視的文件
            - node_modules/
          action: sync # 同步動作,docker會確保對主機上文件所做的任何更改自動與服務(wù)容器內(nèi)的相應(yīng)文件相匹配。
    command: nodemon app.js

請仔細看注釋,此時只需要運行 docker compose up --watch 命令即可實現(xiàn)熱更新。 更多配置請前往官方文檔查看

2. 使用Bind Mounts綁定掛載(容器文件更改會同步到宿主機):

services:
  server:
    build:
      context: .
    ports:
      - 3000:3000
    volumes:
      - .:/usr/src/app  # 綁定掛載宿主機當(dāng)前目錄到容器
      - /usr/src/app/node_modules   # 創(chuàng)建一個匿名卷用于存儲容器的node_modules,防止本地 node_modules目錄覆蓋容器中的依賴。
    command: nodemon --legacy-watch --polling-interval 1000 app.js  # 此處命令與上面不一致

請仔細看注釋,使用該配置運行 docker compose up 命令也能實現(xiàn)熱更新。

注意:

相信你也注意到了command命令和上面的 不一致,這是因為直接運行 nodemon app.js 在windows下會出現(xiàn)熱加載失效的情況。具體現(xiàn)象是在容器內(nèi)修改文件時,nodemon 能夠正確檢測到更改并熱加載應(yīng)用;但在宿主機修改文件時,盡管文件已經(jīng)同步到容器內(nèi),nodemon 卻未能檢測到這些更改,從而無法觸發(fā)熱加載。

原因: 在 Docker 環(huán)境中,尤其是在 macOS 和 Windows 上,由于底層文件系統(tǒng)的差異,文件系統(tǒng)事件(如 inotify 事件)可能無法正確地從宿主機傳遞到容器。這導(dǎo)致 nodemon 無法檢測到宿主機上的文件更改。因此,盡管文件已同步到容器內(nèi),nodemon 依然未能觸發(fā)熱加載。

解決方案: 配置 nodemon 使用輪詢,也就是 nodemon --legacy-watch --polling-interval 1000 app.js 命令實現(xiàn)熱加載功能。不過需要注意的是相較于默認模式,輪詢模式會消耗更多的 CPU 和 I/O 資源,尤其是在大規(guī)模項目或頻繁文件變更的時候。另外也可以嘗試使用 docker-syncmutagen 等工具來解決這個問題,不過我沒試過。

總結(jié)

1.使用 watch 同步配置

優(yōu)點

  • 高級同步策略:可以針對特定文件或目錄設(shè)置不同的同步策略,例如僅在某些文件更改時觸發(fā)重建。
  • 自動化流程:結(jié)合自動重建和同步,提升開發(fā)效率,減少手動操作。
  • 靈活性:可以根據(jù)項目需求定制同步和重建的行為,適應(yīng)復(fù)雜的開發(fā)流程。

缺點

  • 維護成本:配置可能需要更多的維護,尤其是在團隊協(xié)作或項目規(guī)模擴大時。

適用場景

  • 大多數(shù)項目:適用于大多數(shù)項目,個人強烈推薦。

2.使用Bind Mounts綁定掛載

優(yōu)點

  • 實時同步:任何在宿主機上更改會立即在容器內(nèi)生效,反之亦然。
  • 簡單直觀:配置簡單,直接映射宿主機目錄到容器目錄。

缺點

  • 性能問題:在某些操作系統(tǒng)(如 macOS 和 Windows)上,綁定掛載的性能可能較差,尤其是在大量文件操作時。另外在windows下文件系統(tǒng)事件可能無法及時傳遞。
  • 路徑依賴:綁定掛載路徑依賴于宿主機的文件系統(tǒng)結(jié)構(gòu),可能影響跨平臺的可移植性。
  • 權(quán)限管理:需要確保宿主機和容器內(nèi)的文件權(quán)限一致,避免權(quán)限沖突問題。

適用場景

  • 開發(fā)環(huán)境:需要頻繁修改代碼并希望這些更改即時反映到運行中的容器中。
  • 簡單項目:項目結(jié)構(gòu)簡單,不需要復(fù)雜的文件同步策略。

以上就是使用Docker進行node開發(fā)時實現(xiàn)熱加載功能的詳細內(nèi)容,更多關(guān)于Docker node熱加載的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Docker?daemon?配置和故障排除過程

    Docker?daemon?配置和故障排除過程

    這篇文章主要介紹了Docker?daemon?配置和故障排除過程,具有很的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Docker容器應(yīng)用中,10個要不得的壞習(xí)慣

    Docker容器應(yīng)用中,10個要不得的壞習(xí)慣

    這篇文章主要介紹了Docker容器的應(yīng)用中,10個要不得的壞習(xí)慣,幫助大家更好的理解和使用docker,感興趣的朋友可以了解下
    2020-08-08
  • 刪除Docker鏡像、容器和卷的教程指南

    刪除Docker鏡像、容器和卷的教程指南

    Docker 可以輕松地將應(yīng)用程序和服務(wù)封裝在容器中,以便在任何地方運行,然而,在使用 Docker 的過程中,很容易積累大量未使用的鏡像、容器和數(shù)據(jù)卷,這些會使輸出雜亂,并占用磁盤空間,所以本文給大家介紹了如何刪除Docker鏡像、容器和卷,需要的朋友可以參考下
    2024-10-10
  • Docker利用busybox創(chuàng)建基礎(chǔ)鏡像(base image)

    Docker利用busybox創(chuàng)建基礎(chǔ)鏡像(base image)

    今天小編就為大家分享一篇關(guān)于Docker利用busybox創(chuàng)建基礎(chǔ)鏡像(base image),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 使用ssh連接docker服務(wù)器的方法

    使用ssh連接docker服務(wù)器的方法

    這篇文章主要介紹了使用ssh連接docker服務(wù)器的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • docker容器間互相訪問(docker bridge網(wǎng)絡(luò))

    docker容器間互相訪問(docker bridge網(wǎng)絡(luò))

    本文主要介紹了docker容器間互相訪問(docker bridge網(wǎng)絡(luò)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 通過Docker創(chuàng)建CentOS容器的實現(xiàn)步驟

    通過Docker創(chuàng)建CentOS容器的實現(xiàn)步驟

    本文主要介紹了Docker創(chuàng)建CentOS容器,使用文內(nèi)的腳本可以快速創(chuàng)建CentOS 7.8虛擬系統(tǒng)集群,并通過SSH(Secure Shell)遠程工具連接,感興趣的可以了解一下
    2021-11-11
  • docker容器內(nèi)網(wǎng)絡(luò)請求緩慢問題解決

    docker容器內(nèi)網(wǎng)絡(luò)請求緩慢問題解決

    在使用docker的過程中發(fā)現(xiàn)了幾個問題,在docker里進行的網(wǎng)絡(luò)請求經(jīng)常會失敗,這篇文章主要介紹了docker容器內(nèi)網(wǎng)絡(luò)請求緩慢問題解決
    2019-01-01
  • docker部署nginx并且實現(xiàn)https的方法步驟

    docker部署nginx并且實現(xiàn)https的方法步驟

    啟用HTTPS可以提高網(wǎng)站的安全性、可信度,同時符合法規(guī)要求,本文主要介紹了docker部署nginx并且實現(xiàn)https的方法步驟,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • Docker目錄遷移的詳細執(zhí)行步驟(按腳本流程)

    Docker目錄遷移的詳細執(zhí)行步驟(按腳本流程)

    我們在生產(chǎn)環(huán)境中安裝Docker時,默認的安裝目錄是?/var/lib/docker,而通常情況下,規(guī)劃給系統(tǒng)盤的目錄一般為50G,該目錄是比較小的,一旦容器過多或容器日志過多,就可能出現(xiàn)Docker無法運行的情況,所以我們進行Docker目錄遷移,本文給大家介紹了Docker目錄遷移的詳細步驟
    2025-07-07

最新評論

鱼台县| 安阳市| 岐山县| 迭部县| 雷波县| 潞西市| 阿瓦提县| 堆龙德庆县| 门头沟区| 三穗县| 布尔津县| 长治县| 彭水| 宣化县| 太康县| 宜君县| 左权县| 尼玛县| 绥化市| 平乐县| 金平| 瓦房店市| 宝山区| 民丰县| 呼伦贝尔市| 辽阳市| 呼伦贝尔市| 丹阳市| 乌恰县| 吉隆县| 阜城县| 雅安市| 佛冈县| 永德县| 平舆县| 承德市| 毕节市| 广宁县| 宣城市| 开江县| 定西市|