国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用 Docker 輕松開發(fā) Node.js

上一篇文章中,我們了解到:

  • Docker 基礎知識

  • Docker 鏡像

  • Docker容器

  • 構建 Node.js 鏡像并在容器中運行它

為我們的 Node.js 應用程序提供一個單獨的環(huán)境看起來不錯(對于基礎知識而言),但您必須構建一個映像并在進行每一個小更改后再次運行它。

如果您想要同步您的開發(fā)環(huán)境,以便一旦您對代碼進行更改,它會在您再次訪問 API 后自動反映,該怎么辦?對于開發(fā)環(huán)境來說聽起來很酷,對吧???

輸入綁定坐騎

官方文檔說,當您使用綁定掛載時,主機上的文件或目錄將掛載到容器中。文件或目錄通過其在主機上的絕對路徑引用。請在此處(https://docs.docker.com/storage/bind-mounts/)閱讀官方詳細信息。

簡而言之,它將應用程序目錄與容器內的目錄同步,以便您在主機中所做的任何更改都會立即反映在容器中。

將應用程序目錄與容器內的目錄同步

這意味著如果您更改文件中的任何內容,它們將在正在運行的容器中自動更改。

Nodemon 和 package.json

由于您來自node.js世界,您會知道我們必須使用nodemon它來監(jiān)視根目錄中的文件,然后在檢測到文件更改后立即重新啟動node.js應用程序。

我全局安裝了 nodemon,所以我遇到了 docker 容器的問題,所以請通過運行以下命令來確保您nodemon的容器中有node_modules:

npm install --save-dev nodemon

您將擁有它devDependencies?,F(xiàn)在您應該scripts在中進行如下編輯package.json:

"scripts": {
    "start": "node index.js",
    "dev": "nodemon -L index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

最后,你的package.json應該看起來像這樣:

{
  "name": "docker",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon -L index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.18.2"
  },
  "devDependencies": {
    "nodemon": "^3.0.1"
  }
}

我們現(xiàn)在已經完成了package.json更改。讓我們繼續(xù)更新Dockerfile

更新 Dockerfile

在我們從上一篇文章中得到這個之前:

FROM node:12.18.3-alpine3.12
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE 3000:3000
CMD ["node", "index.js"]

現(xiàn)在,由于我們已經更新package.json并且我們想在開發(fā)環(huán)境中運行它,因此我們必須運行以下命令:

npm run dev

為了使其出現(xiàn)在 Dockerfile 中,我們必須像這樣替換最后一行:

CMD ["npm", "run", "dev"]

總體 Dockerfile 應該如下所示:

FROM node:12.18.3-alpine3.12
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
ENV PORT 3000
EXPOSE $PORT
EXPOSE 3000:3000
CMD ["npm", "run", "dev"]

我們還進行了以下兩項更改:

ENV PORT 3000
EXPOSE $PORT

3000我們現(xiàn)在直接在我們的環(huán)境變量中添加Dockerfile并公開它。

構建 Docker 鏡像

由于現(xiàn)在我們進行了更改,package.json因此我們必須根據(jù)之前學到的命令重新構建圖像:

docker build -t shameel-node-image .

運行 Docker 容器

從上一篇文章中,我們了解到了這個 docker 命令:

docker run -p 3000:3000 -d --name shameel-node-app -d shameel-node-image

這將從容器的內部端口(即,到的shameel-node-app端口)運行名為 docker 容器。shameel-node-imagedetached modeexposes3000hostMachine3000


文章來源地址http://www.zghlxwxcb.cn/article/332.html

現(xiàn)在,您需要使用一個新標志-v:

docker run -v <hostMachinePath>:<containerPath> -p 3000:3000 -d --name shameel-node-app -d shameel-node-image

如果你在 Windows 上,你可以這樣給出:

docker run -v "D:\shameel-node-docker":/app -p 3000:3000 --name shameel-node-app shameel-node-image

您必須給出 的絕對路徑hostMachine。在本例中,D:\shameel-node-docker是我的應用程序在 Windows 計算機中存在的絕對路徑。

但這使得我們的命令太長了。我們需要一個能夠以更干凈的方式為我們提供絕對路徑的解決方案。

在 Windows CMD 中,您可以使用以下命令獲取它%cd%,在 Linux Bash 中,您應該可以使用以下命令獲取它:$(pwd)

對于重擊

我使用 Git Bash 進行了嘗試,我希望它也能在 Linux 中的 Bash 中工作。

$ docker run -v "$(pwd):/app" -p 3000:3000 -d --name shameel-node-app shameel-node-image

我得到這個輸出,這意味著容器開始運行:

使用 Git Bash 進行了嘗試,我希望它也能在 Linux 中的 Bash 中工作

對于 Windows CMD

我運行了這個命令,它在 CMD 中就像一個魅力:

docker run -v "%cd%:/app" -d -p 3000:3000 --name shameel-node-app shameel-node-image

檢查安裝座

您現(xiàn)在已成功地將位置從主機安裝到容器并希望驗證它。

為此,命令的語法如下:

docker inspect <conainer-name>

對于我的情況,它變成這樣:

docker inspect shameel-node-app

然后從整個輸出中查找Mounts 。

如果您不想檢查所有內容而只想關注Mount,請運行以下命令:

docker inspect -f "{{ .Mounts }}" shameel-node-app

您應該能夠看到bind主機到容器的路徑。

如果您有 Docker Desktop,則可以選擇容器并單擊Bind mounts以查看:

選擇容器并單擊Bind mounts以查看

Docker 桌面綁定掛載

避免node_modules同步

目前,如果您node_modules從主機中刪除。它也將從容器中刪除。

這不應該是一個想要的行為,因為我們已經node_modules在我們的Dockerfile. 因此,我們必須想出一種方法來同步除node_modules

我們將不得不使用-v具有更具體路徑的標志。

我在 CMD 中運行了這樣的命令:

docker run -v "%cd%:/app" -v /app/node_modules -d -p 3000:3000 --name shameel-node-app shameel-node-image

現(xiàn)在,您也可以從 Docker Desktop 進行驗證:

Docker Dekstop 驗證

node_modules除了是 之外的一切MOUNT。

node_modulesnpm install現(xiàn)在通過我們的命令安裝Dockerfile,并且不再同步到主機。

驗證開發(fā)環(huán)境

目前我們有這個應用程序:

應用程序截圖

進行輕微更改并將其保存在文件中后,如下所示:

app.get('/', (_, res) => {
    res.send('Hello Shameel! How are you?');
    }
);

您可以在下圖中檢查nodemonDocker Desktop 日志中的重新啟動,一旦我們刷新頁面,我們應該能夠看到反映的更改

反映的變化

您也可以通過此命令檢查 CLI 中的日志:

docker logs <container>

對我來說,它是:

docker logs shameel-node-app

碼頭工人日志

為什么應該進行只讀綁定掛載

目前,安裝是雙面的。如果您對容器中的目錄進行任何更改app,它將反映在您的主機中。

這是危險的,因為如果有人以某種方式訪問了您的容器,那么黑客就可以輕松地將惡意內容放入您的主機中。

命令中唯一的變化是添加了:ro確保掛載為只讀的命令。

bash 中的命令如下所示:

docker run -v "$(pwd):/app:ro" -p 3000:3000 -d --name shameel-node-app shameel-node-image

CMD 中的命令如下所示:

docker run -v "%cd%:/app:ro" -p 3000:3000 -d --name shameel-node-app shameel-node-image

結論

在這篇博客中,我們學習了如何在 docker 的幫助下通過合并綁定掛載并確保我們的開發(fā)更改在保存文件后立即得到反映,從而使 Node.js 中的開發(fā)變得容易。

快樂的編碼和容器化!???


到此這篇關于使用 Docker 輕松開發(fā) Node.js的文章就介紹到這了,更多相關內容可以在右上角搜索或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

原文地址:http://www.zghlxwxcb.cn/article/332.html

如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請聯(lián)系站長進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Node,docker 中安裝node.js

    Node,docker 中安裝node.js

    首先啟動docker服務:systemctl start docker 啟動完成之后拉取node最新鏡像:docker pull node 然后開始等待,最后拉取完成會有相應的輸出信息。 我們再通過命令確認下node是否拉取成功:docker images 到這里,node最新鏡像已被成功拉取下來。 接下來我們就要運行鏡像:docker run -i -t node /

    2024年02月13日
    瀏覽(26)
  • Docker與Node.js容器化

    Docker是一種開源的應用容器引擎,它使用標準化的包裝應用程序以及它們的依賴項,以便在任何運行Docker的環(huán)境中運行。Node.js是一個基于Chrome的JavaScript運行時,它使得開發(fā)者可以使用JavaScript編寫后端應用程序。 容器化是一種將應用程序和其所有依賴項打包到一個可移植的環(huán)

    2024年02月21日
    瀏覽(25)
  • 實戰(zhàn):Docker化Node.js項目

    Docker是一種輕量級的應用容器技術,可以將應用程序及其所有依賴項打包成一個可移植的容器,以便在任何支持Docker的環(huán)境中運行。Node.js是一種基于Chrome的JavaScript運行時,可以用于構建高性能和可擴展的網(wǎng)絡應用程序。在現(xiàn)代軟件開發(fā)中,將Node.js應用程序Docker化是一項重要

    2024年02月21日
    瀏覽(31)
  • 如何選擇最佳的 Node.js Docker 鏡像

    如何選擇最佳的 Node.js Docker 鏡像

    選擇一個Node.js的Docker鏡像看起來像是一件小事,但是鏡像的大小和潛在漏洞可能會對你的CI/CD流程和安全造成重大的影響。那我們如何選擇一個最好Node.js Docker鏡像呢?我們在使用 FROM node:latest 或只是 FROM node 時,很容易忽略他潛在的風險。如果你不知道總體的安全風險并且把

    2024年02月10日
    瀏覽(20)
  • 如何使用Zabbix官方模板輕松實現(xiàn)Docker容器監(jiān)控?

    如何使用Zabbix官方模板輕松實現(xiàn)Docker容器監(jiān)控?

    感謝王軍 ZCP(Zabbix 高級認證專家)翻譯!歡迎投稿分享你的使用經驗。 本文將介紹通過Zabbix監(jiān)控Docker容器。使用官方模板 Docker by Zabbix agent2 template 很容易實現(xiàn)Docker容器監(jiān)控。模板下載鏈接和配置步驟可以在 Zabbix 集成頁面上找到。 導入官方Docker模板 安裝并配置Zabbix Agent2 Z

    2024年02月05日
    瀏覽(20)
  • 瘋狂Node.js服務器篇:使用VsCode搭建Node.js開發(fā)環(huán)境

    瘋狂Node.js服務器篇:使用VsCode搭建Node.js開發(fā)環(huán)境 Node.js作為一種流行的服務器端JavaScript運行環(huán)境,提供了強大的功能和便捷的開發(fā)體驗。在本篇文章中,我們將探索如何使用VsCode搭建Node.js開發(fā)環(huán)境,以便更高效地進行服務器端應用程序的開發(fā)。 步驟1:安裝Node.js 首先,我們

    2024年02月08日
    瀏覽(24)
  • 輕松掌握k8s(使用docker)安裝知識點

    輕松掌握k8s(使用docker)安裝知識點

    kubernetes具有以下特性: 服務發(fā)現(xiàn)和負載均衡 Kubernetes 可以使用 DNS 名稱或自己的 IP 地址公開容器,如果進入容器的流量很大, Kubernetes 可以負載均衡并分配網(wǎng)絡流量,從而使部署穩(wěn)定。 存儲編排 Kubernetes 允許你自動掛載你選擇的存儲系統(tǒng),例如本地存儲、公共云提供商等。

    2023年04月22日
    瀏覽(27)
  • Node Version Manager(nvm):輕松管理 Node.js 版本的利器

    Node Version Manager(nvm):輕松管理 Node.js 版本的利器

    Node.js 是現(xiàn)代 Web 開發(fā)中不可或缺的一部分,然而,隨著時間的推移,Node.js 的不斷更新和發(fā)展,我們往往需要在同一臺機器上安裝和管理多個 Node.js 版本,以適應不同項目的需求。而在這個問題上, Node Version Manager(nvm) 成為了解決方案。本文將介紹如何安裝和使用 nvm,讓

    2024年04月28日
    瀏覽(101)
  • 輕松使用Docker啟動MySQL并初始化SQL(Dockerfile)

    在本教程中,我們將使用Docker來啟動MySQL容器,并通過初始化SQL腳本來創(chuàng)建數(shù)據(jù)庫和表。此外,我們還將演示如何將MySQL密碼外置到環(huán)境變量文件中,以增加安全性。 在開始之前,請確保已經安裝了Docker。如果尚未安裝,可以參考我前面的教程 首先,我們需要創(chuàng)建一個名為

    2024年02月22日
    瀏覽(21)
  • 使用Portainer圖形化工具輕松管理遠程Docker環(huán)境并實現(xiàn)遠程訪問

    使用Portainer圖形化工具輕松管理遠程Docker環(huán)境并實現(xiàn)遠程訪問

    Portainer 是一個輕量級的容器管理工具,可以通過 Web 界面對 Docker 容器進行管理和監(jiān)控。它提供了可視化的界面,使得用戶可以更加方便地管理 Docker 容器、鏡像、網(wǎng)絡和數(shù)據(jù)卷等資源。下面介紹如何將本地Portainer 管理界面結合cpolar內網(wǎng)穿透工具實現(xiàn)遠程任意瀏覽器訪問! 遠程

    2024年02月08日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包