如何使用DockerCompose改善Node.js的開發(fā)

這篇文章主要介紹“如何使用Docker Compose改善Node.js的開發(fā)”,在日常操作中,相信很多人在如何使用Docker Compose改善Node.js的開發(fā)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何使用Docker Compose改善Node.js的開發(fā)”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設計、網(wǎng)站建設與策劃設計,東湖網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設10余年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:東湖等地區(qū)。東湖做網(wǎng)站價格咨詢:18982081108

在過去的幾年中,Docker和Node.js都變得非常流行。對于開發(fā)人員來說利用這些新技術(shù)來改善自己的開發(fā)體驗很有必要,而且在此過程中還

概述

本文中,我們以Express.js為一個示例展開,需要實現(xiàn)了解一丁點Node.js和npm的基礎知識。還要了解Express.js框架的基礎知識。

對Docker也要有一定的概念和要會基礎操作(不會也沒關系,很容易)。

如何使用Docker Compose改善Node.js的開發(fā)

最后本文全程使用Linux(Mac) shell終端命令行。

創(chuàng)建Express.js項目

為了要生成示范應用程序,需要使用Express應用程序生成器。需要運行以下npx命令行:

npx express-generator --view=pug --git <app-name>

Express生成器將生成Express應用。--view=pub選項表示使用pug視圖引擎。--git表示用來給項目添加一個git  .gitignore文件。

生成效果如下:

如何使用Docker Compose改善Node.js的開發(fā)

測試Express應用

要測試該應用程序,需要運行npm install安裝所有必需的npm模塊。然后,運行以下命令以啟動應用程序:

DEBUG=nodejs-docker-express:* npm start

如果沒有異常,應該會到一條類似的消息。

nodejs-docker-express:server Listening on port 3000

上面的命令非常簡單:它運行一個環(huán)境變量DEBUG=nodejs-docker-express,用來表示服務器進行詳細的調(diào)試。

對Windows系統(tǒng),使用的參數(shù)要修改為:

set DEBUG=nodejs-docker-express:* & npm start

現(xiàn)在打開瀏覽器,在地址欄并輸入localhost:3000并訪問:

如何使用Docker Compose改善Node.js的開發(fā)

這樣示例的Express.js應用就已經(jīng)在運行OK了。是不是非常簡單?有此基本的"Hello,World!"為基礎,我們進一步深入。

Docker多階段構(gòu)建

容器化應用程序有很多好處:首先,無論運行平臺是什么,其行為都相同。借助Docker容器,應用程序可以輕松部署到各個公有容器云(比如AWS  Fargate,Google Cloud Run),自建的K8S集群中,甚至本地docker上。

容器化,基礎是Dockerfile。Dockerfile是構(gòu)建Docker鏡像的基礎。用Dockerfile編譯生成的鏡像運行時,就稱之為容器。

如何使用Docker Compose改善Node.js的開發(fā)

如圖示,整個過程非常簡單:從Dockerfile構(gòu)建Docker鏡像。運行鏡像,得到運行時容器。

Dockerfile

Dockerfile有一些類似命令行的語句:

FROM node:14-alpine as base WORKDIR /src COPY package*.json / EXPOSE 3000 FROM base as production ENV NODE_ENV=production RUN npm ci COPY . / CMD ["node", "bin/www"]  FROM base as dev ENV NODE_ENV=development RUN npm install -g nodemon && npm install COPY . / CMD ["nodemon", "bin/www"]

通過Docker鏡像的分層繼承,創(chuàng)建了一個精簡的production鏡像和一個功能更豐富,以開發(fā)為重點的dev鏡像。

在Dockerfile中,使用了多階段構(gòu)建,整個過程分為三個階段:base,production和dev。production和dev依賴于base,base為node:14-alpine的基礎鏡像,該基礎鏡像需要從DockerHub獲取,這是一個官方Alpine基礎OS的Node.js官方鏡像,主鏡像為345MB,Node.js鏡像大概不到40M。

WORKDIR /src COPY package*.json / EXPOSE 3000

WORKDIR語句設置了Docker運行的工作目錄,其后的命令都在該工作目錄運行。COPY語句,復制package*.json(package.json和package-lock.json)容器中。

EXPOSE語句,設置Node.js Express Web服務器的監(jiān)聽端口。上述步驟對于開發(fā)和生產(chǎn)階段都是通用的。

現(xiàn)在我們來看看生產(chǎn)目標階段是如何構(gòu)建的。

production

在生產(chǎn)階段,繼續(xù)從基礎階段開始的工作,F(xiàn)ROM語句指示Docker從base開始。ENV語句設置Docker將環(huán)境變量NODE_ENV為production。

FROM base as production ENV NODE_ENV=production RUN npm ci COPY . / CMD ["node", "bin/www"]

變量ENV設置為production可以使性能提高三倍,并且提供一些其他優(yōu)化,比如緩存視圖。npm  install命令只會安裝主要依賴項,忽略開發(fā)依賴項。這些設置非常適合生產(chǎn)環(huán)境。

接著使用RUN語句運行npm ci而非npm install。npm ci適用于持續(xù)集成和部署。和npm  install相比,會繞過某些面向用戶的功能。當然,npm ci需要一個package-lock.json文件才能工作。

之后,還是使用COPY語句將代碼復制到工作目錄。

最后使用CMD語句,運行Node應用服務器和/srcbin/www

dev

我們利用了多階段構(gòu)建,并在開發(fā)階段添加開發(fā)所需的組件:

FROM base as dev ENV NODE_ENV=development RUN npm install -g nodemon && npm install COPY . / CMD ["nodemon", "bin/www"]

大體上和生產(chǎn)極端類似,差異為NODE_ENV環(huán)境變量設置為development。

接著,用RUN語句安裝nodemon。每當文件更改時,nodemon都會重新啟動服務器,從而開發(fā)體驗更加流暢。同時執(zhí)行npm  install,該命令會遞歸安裝dev依賴項。例如,如果要使用Jest測試應用程序,那將是開發(fā)依賴項之一。

請注意,這兩個命令通過&&放在一起,創(chuàng)建更少的Docker層,于構(gòu)建緩存非常有用。這是撰寫Dockerfile時候常用的一個技巧。

和生產(chǎn)階段相同,將代碼復制到容器。但是,用nodemon取代了Node服務器,這樣在每次文件/src更改時會重新啟動它。

.dockerignore

和git的.gitignore一樣,docker也使用.dockerignore來忽略不想放入Docker鏡像的文件。通過忽略無關的文件更改,它有助于使Docker鏡像保持身材,而且能使構(gòu)建緩存更高效。本示例中.dockerignore

.git node_modules

非常簡單,告訴Docker不COPY.git文件夾和node_modules從主機復制到Docker容器。

使用Docker Compose

到目前為止,我們創(chuàng)建一個使用運行Node.js Express應用程序Docker所需的大部分功能。為了更便捷,我們還建議用Docker  Compose,這樣可以更輕松地使用單個或多個容器運行應用程序。這樣也無需要記住很長的命令來構(gòu)建或運行容器。只需通過:

docker-compose build docker-compose up

但是docker-compose使用yml的配置文件和dockerfile略有不同:

如何使用Docker Compose改善Node.js的開發(fā)

上述,我們指定Docker  Compose的版本,在本例中為3.8,對應Docker引擎19.0.3支持的最新版本。這樣可以支持多階段Docker構(gòu)建。

接著,指定正在使用的服務。在本教程中,只有一個名為web的服務,具有context為當前目錄的構(gòu)建以及一個重要的構(gòu)建參數(shù)target設置為dev。這告訴Docker在dev階段構(gòu)建Docker映像。

之后,通過volumes制定  Docker卷。它指示Docker從Docker容器上的./和主機本地/src目錄復制和同步更改。當我們在主機中更改文件時,這將很有用,并且文件也將立即反映到容器中。

command語句運行npm run start:dev,start:dev執(zhí)行內(nèi)容定義在package.json,內(nèi)容為:

"start:dev": "nodemon ./bin/www"

表示使用nodemon啟動Web服務器。在開發(fā)環(huán)境中,可以在每次保存文件時重新啟動服務器。

接下來,用ports語句設置docker端口映射主機的3000端口與容器3000端口。在構(gòu)建容器時,公開了端口3000,  Web服務器就會在3000上運行。

最后,設置了兩個環(huán)境變量。首先,將其NODE_ENV設置為development,因為這樣可以看到詳細的Debug信息,也沒有任何視圖緩存。然后,將debug設置為*,讓Web服務器打印出所有內(nèi)容的詳細調(diào)試消息。

測試應用程序

前面,設置了弄好了基礎構(gòu)建配置文件,接著構(gòu)建Docker鏡像。使用BuildKit優(yōu)化Docker構(gòu)建。啟用BuildKit可以更快地構(gòu)建Docker鏡像,運行以下命令:

COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose build

該命令告訴Compose在BuildKit上構(gòu)建Docker鏡像。它應該在一段時間內(nèi)運行并構(gòu)建Docker鏡像,如下所示:

如何使用Docker Compose改善Node.js的開發(fā)

Docker鏡像大約在14秒內(nèi)構(gòu)建完成,使用BuildKit可以更快。運行該鏡像:

docker-compose up

如何使用Docker Compose改善Node.js的開發(fā)

然后瀏覽器訪問localhost:3000:

如何使用Docker Compose改善Node.js的開發(fā)

這樣我們,自配置的應用程序在Docker上已經(jīng)完美運行。我們來改改源文件,看看效果。

我們修改下源碼將" Welcome to Express"更改為" Welcome to Express with  Docker"來測試。在源文件目錄/src下,找到routes/index.jsline文件,修改語句為:

res.render('index', { title: 'Express with Docker' });

保存文件,然后可以看到Web服務器已經(jīng)重新啟動,表示Docker卷和nodemon可以都可以正常工作。

如何使用Docker Compose改善Node.js的開發(fā)

F5刷新瀏覽器,內(nèi)容已經(jīng)修改:

如何使用Docker Compose改善Node.js的開發(fā)

總結(jié)

本文中我們利用Docker和Docker  Compose構(gòu)建了一個簡單的Nodejs的開發(fā)和運行環(huán)境。Node.js和docker的配合很好。通過使用docker-compose,開發(fā)體驗更加流暢。當然這這是一個很簡單的開始,對于更復雜的應用(比如需要訪問數(shù)據(jù)庫)才是Docker  Compose的用武之地,他可以同時啟動和管理多個容器,比如給開發(fā)環(huán)境增加Mongo或MySQL添加為應用程序的數(shù)據(jù)源,只需很輕松地增加一個docker-compose配置的服務語句就可以搞定整個環(huán)境。

到此,關于“如何使用Docker Compose改善Node.js的開發(fā)”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

當前文章:如何使用DockerCompose改善Node.js的開發(fā)
網(wǎng)頁URL:http://muchs.cn/article24/pgodje.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、企業(yè)建站、網(wǎng)站改版、網(wǎng)頁設計公司、關鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)