成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

將 Node.js 應(yīng)用程序容器化的七種方法

開(kāi)發(fā) 前端
本文列出了七種容器化 Node.js 應(yīng)用程序的方法,讓我們簡(jiǎn)要地看一下它們。

本文列出了七種容器化 Node.js 應(yīng)用程序的方法,讓我們簡(jiǎn)要地看一下它們。

在過(guò)去的五年里,Node.js 一直是嚴(yán)肅程序員的最愛(ài)。最大吞吐量的 JavaScript 運(yùn)行時(shí)環(huán)境是一個(gè)免費(fèi)的開(kāi)源程序,旨在提高JavaScript在多個(gè)平臺(tái)上的性能。

由于其事件驅(qū)動(dòng)、非阻塞 I/O 方法,Node.js 體積小且處理請(qǐng)求速度快,使其成為數(shù)據(jù)密集型、實(shí)時(shí)和分布式應(yīng)用程序的絕佳選擇。

開(kāi)發(fā)人員越來(lái)越多地轉(zhuǎn)向 Node.js 應(yīng)用程序優(yōu)化服務(wù);因此,簡(jiǎn)化跨平臺(tái)應(yīng)用程序的設(shè)計(jì)和發(fā)布過(guò)程非常重要。那么,讓我們進(jìn)入文章的上下文。

Node App 容器化和優(yōu)化建議

這里列出了七種容器化 Node.js 應(yīng)用程序的方法。讓我們簡(jiǎn)要地看一下它們。

1.使用特定的基本圖像標(biāo)簽而不是“版本:最新”

創(chuàng)建Docker映像時(shí),應(yīng)始終包含用于定義版本信息、預(yù)期目標(biāo)(例如生產(chǎn)或測(cè)試)、穩(wěn)定性或其他用于跨環(huán)境分發(fā)應(yīng)用程序的相關(guān)信息的有用標(biāo)簽。

在開(kāi)發(fā)環(huán)境之外,您不應(yīng)依賴 Docker 自動(dòng)下載的最新標(biāo)簽。使用最新版本的程序可能會(huì)導(dǎo)致奇怪甚至有害的影響。

假設(shè)您不斷更新到最新版本的圖像。在這種情況下,最終,其中一個(gè)更新肯定會(huì)包含一個(gè)全新的構(gòu)建或未經(jīng)測(cè)試的代碼,這將導(dǎo)致您的應(yīng)用程序停止按預(yù)期運(yùn)行。

以針對(duì)該節(jié)點(diǎn)的這個(gè)示例 Dockerfile 為例:

# Create image based on the official Node image from dockerhubFROM 
node:lts-buster # Create app directoryWORKDIR /usr/src/app # Copy dependency 
definitionsCOPY package.json ./package.jsonCOPY package-lock.json 
./package-lock.json # Install dependencies#RUN npm set progress=false \# 
&& npm config set depth 0 \# && npm i installRUN npm ci # Get 
all the code needed to run the appCOPY . . # Expose the port the app runs 
inEXPOSE 3000 # Serve the appCMD ["npm", "start"]

node:latest您應(yīng)該使用Docker 映像而不是使用lts-buster。考慮到這lts-buster是一張靜態(tài)圖片,這種方法可能更可取。

2.使用多階段構(gòu)建

一個(gè)單一的 Docker 基礎(chǔ)鏡像可以在構(gòu)建的多個(gè)階段使用,包括編譯、打包和 單元測(cè)試。但是,執(zhí)行程序的實(shí)際代碼存儲(chǔ)在不同的映像中。

由于完成的圖像沒(méi)有任何開(kāi)發(fā)或調(diào)試工具,因此它會(huì)更安全并且占用更少的空間。此外,如果您使用 Docker 的多階段構(gòu)建過(guò)程,您可以確定您的構(gòu)建將既高效又可重復(fù)。

您可以在 Dockerfile 中創(chuàng)建多個(gè)階段來(lái)控制構(gòu)建該映像的方式。您可以使用多層方法容器化您的 Node 應(yīng)用程序。

應(yīng)用程序的不同部分,如代碼、資產(chǎn),甚至快照依賴項(xiàng),可能位于構(gòu)成程序的許多層的每一層中。如果我們希望為我們的應(yīng)用程序創(chuàng)建一個(gè)獨(dú)立的圖像怎么辦?

要查看此操作的示例 Dockerfile,請(qǐng)檢查以下內(nèi)容:

FROM NODE:LTS-BUSTER-SLIM AS DEVELOPMENT WORKDIR /USR/SRC/APP COPY 
PACKAGE.JSON ./PACKAGE.JSONCOPY PACKAGE-LOCK.JSON ./PACKAGE-LOCK.JSONRUN NPM CI 
COPY . . EXPOSE 3000 CMD [ "NPM", "RUN", "DEV" ] FROM DEVELOPMENT AS DEV-ENVSRUN 
<

我們首先AS DEVELOPMENT為NODE:LTS-BUSTER-SLIM語(yǔ)句添加一個(gè)標(biāo)簽。這使我們可以在其他構(gòu)建階段中引用此構(gòu)建階段。接下來(lái),我們添加一個(gè)標(biāo)記為 的新開(kāi)發(fā)階段DEV-ENVS。我們將使用這個(gè)階段來(lái)運(yùn)行我們的開(kāi)發(fā)。

現(xiàn)在,讓我們重建我們的形象并運(yùn)行我們的開(kāi)發(fā)。為了僅執(zhí)行開(kāi)發(fā)構(gòu)建階段,我們將使用與之前相同的 Docker 構(gòu)建命令,但這次我們將使用 -development-target參數(shù)。

docker build -t node-docker --target dev-envs

3.修復(fù)節(jié)點(diǎn)鏡像中的安全漏洞

為了創(chuàng)建現(xiàn)代服務(wù),程序員經(jīng)常使用已有的第三方軟件。但是,在將第三方軟件集成到您的項(xiàng)目中時(shí)一定要謹(jǐn)慎,因?yàn)樗赡艽嬖诎踩┒础?/p>

使用經(jīng)過(guò)驗(yàn)證的圖像源和保持警惕的容器監(jiān)控都是有用的安全措施。

node:lts-buster-slimDocker Desktop 會(huì)通知您對(duì)新創(chuàng)建的Docker 鏡像進(jìn)行安全檢查。

讓我們借助 Docker Desktop 的 Snyk 插件看看我們的 Node.js 應(yīng)用程序。首先在您的 Mac、Windows 或 Linux PC 上設(shè)置Docker Desktop 4.8.0+。接下來(lái),選擇設(shè)置 > 擴(kuò)展下的允許 Docker 擴(kuò)展復(fù)選框。

之后,您可以通過(guò)選擇左側(cè)欄中的“添加擴(kuò)展”選項(xiàng)在擴(kuò)展市場(chǎng)中搜索 Snyk。

放入 Snyk 并登錄網(wǎng)絡(luò):

在“選擇圖像名稱”框中鍵入“Node Docker 官方圖像”。為了開(kāi)始掃描,您需要登錄到 Docker Hub。如果您沒(méi)有帳戶,請(qǐng)不要擔(dān)心;制作一個(gè)簡(jiǎn)單、快速且完全免費(fèi)。

使用 Docker Desktop,掃描結(jié)果如下所示:

在此掃描期間,Snyk 發(fā)現(xiàn)了 70 個(gè)不同嚴(yán)重程度的漏洞。確定它們后,您可以開(kāi)始修復(fù)它們以提高您的聲譽(yù)。

不僅如此:在您的 Dockerfile 上使用 Docker scan 命令將執(zhí)行漏洞掃描。

4. 利用健康檢查

該HEALTHCHECK指令指示 Docker 如何檢查容器的運(yùn)行狀況。例如,這可用于確定 Web 服務(wù)器是否處于無(wú)限循環(huán)中并且無(wú)法接受新連接,即使服務(wù)器進(jìn)程仍處于活動(dòng)狀態(tài)。

# syntax=docker/dockerfile:1.4 FROM node:lts-buster-slim AS development # 
Create app directoryWORKDIR /usr/src/app COPY package.json ./package.jsonCOPY 
package-lock.json ./package-lock.jsonRUN npm ci COPY . . EXPOSE 3000 CMD [ 
"npm", "run", "dev" ] FROM development as dev-envsRUN <

在生產(chǎn)階段,應(yīng)用程序通常由 Kubernetes 或服務(wù)結(jié)構(gòu)等編排器管理。HEALTHCHECK允許您通知編排器有關(guān)容器的健康狀況,這可能用于基于配置的管理。

這是一個(gè)很好的例子:

BACKEND: CONTAINER_NAME: BACKEND RESTART: ALWAYS BUILD: BACKEND VOLUMES: - 
./BACKEND:/USR/SRC/APP - /USR/SRC/APP/NODE_MODULES DEPENDS_ON: - MONGO NETWORKS: 
- EXPRESS-MONGO - REACT-EXPRESS EXPOSE: - 3000 HEALTHCHECK: TEST: ["CMD", 
"CURL", "-F", "HTTP://LOCALHOST:3000"] INTERVAL: 1M30S TIMEOUT: 10S RETRIES: 3 
START_PERIOD: 40S

5.使用.dockerignore

我們建議在與 Dockerfile 相同的文件夾中創(chuàng)建一個(gè).dockerignore文件以縮短構(gòu)建時(shí)間。本指南需要您的 .dockerignore 文件中的一行:

NODE_MODULES

由于這一行,包含 Maven 輸出的節(jié)點(diǎn)模塊目錄未包含在 Docker 構(gòu)建上下文中。擁有一個(gè)組織良好的.dockerignore文件有很多好處,但目前,這個(gè)簡(jiǎn)單的文件就足夠了。

接下來(lái),我將描述構(gòu)建環(huán)境及其如此重要的原因。可以使用 Docker build 命令通過(guò)組合 Dockerfile 和“上下文”來(lái)創(chuàng)建 Docker 映像。在此設(shè)置中,您所做的一切都適用于您剛才給我的目錄結(jié)構(gòu)或 URL。這些文件中的任何一個(gè)都可以在構(gòu)建過(guò)程中使用。

同時(shí),Node 開(kāi)發(fā)人員在編譯上下文中操作。Mac、Windows 或 Linux 上的目錄。運(yùn)行該程序所需的一切都可以在此文件夾中找到,包括源代碼、設(shè)置、庫(kù)和插件。

如果你提供一個(gè)。dockerignore文件,我們可能會(huì)在創(chuàng)建新圖像時(shí)使用它來(lái)跳過(guò)項(xiàng)目的某些部分:代碼、配置文件、庫(kù)、插件等。例如,如果你想將節(jié)點(diǎn)模塊目錄保留在構(gòu)建之外,你可以通過(guò)將以下內(nèi)容添加到您的.dockerignore文件來(lái)實(shí)現(xiàn)。

后端

前端

6.出于安全目的以非根用戶身份運(yùn)行

在用戶許可的情況下運(yùn)行應(yīng)用程序更安全,因?yàn)檫@有助于減少漏洞 - 即使使用 Docker 容器也是如此。Docker 容器及其內(nèi)容會(huì)自動(dòng)獲得對(duì)主機(jī)系統(tǒng)的根訪問(wèn)權(quán)限。這就是為什么建議永遠(yuǎn)不要以 root 用戶身份運(yùn)行 Docker 容器。

USR這可以通過(guò)在 Dockerfile 中包含某些指令來(lái)實(shí)現(xiàn)。在執(zhí)行圖像和任何未來(lái)的RUN、CMD或ENTRYPOINT指令時(shí),該USR命令指定所需的用戶名(或 UID),以及可選的用戶組(或 GID):

FROM NODE:LTS-BUSTER AS DEVELOPMENT WORKDIR /USR/SRC/APP COPY PACKAGE.JSON 
./PACKAGE.JSONCOPY PACKAGE-LOCK.JSON ./PACKAGE-LOCK.JSON RUN NPM CI COPY . . 
EXPOSE 3000 CMD ["NPM", "START"] FROM DEVELOPMENT AS DEV-ENVSRUN <

7. 探索 Node 的優(yōu)雅關(guān)閉選項(xiàng)

在 Docker 中為 Node.js 創(chuàng)建的臨時(shí)存儲(chǔ)空間。它們很容易預(yù)防、銷毀,然后更換或重新利用。可以通過(guò)向進(jìn)程發(fā)出信號(hào)來(lái)終止容器SIGTERM。

為了充分利用這個(gè)短暫的機(jī)會(huì)窗口,您的應(yīng)用程序必須能夠立即處理傳入的請(qǐng)求并釋放任何相關(guān)資源。

另一方面,Node.js 對(duì)于成功關(guān)閉應(yīng)用程序至關(guān)重要,因?yàn)樗邮詹鬟f來(lái)自SIGINT操作系統(tǒng)SIGTERM的信號(hào)。由于 Node.js,您的應(yīng)用程序可以選擇如何響應(yīng)它接收到的信號(hào)。

如果你不為他們編程或使用一個(gè)模塊,你的應(yīng)用程序?qū)o(wú)法正常終止。但是,它將繼續(xù)正常運(yùn)行,直到 Docker 或 Kubernetes 由于超時(shí)而終止它。

如果您無(wú)法修改應(yīng)用程序的代碼,您仍然可以在 Dockerfile 中使用 docker run —init 或 tini init 選項(xiàng)。但是,建議您提供代碼來(lái)管理適當(dāng)?shù)男盘?hào)處理以實(shí)現(xiàn)正常關(guān)閉。

結(jié)論

在本教程中,我們涵蓋了與 Docker 鏡像優(yōu)化相關(guān)的廣泛主題,從構(gòu)建可靠的 Dockerfile 到使用 Snyk 檢查漏洞。制作更好的 Node.js 應(yīng)用程序并不難。如果你掌握了一些基本技能,你的狀態(tài)就會(huì)很好。

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2023-03-24 15:57:31

Node.js應(yīng)用程序容器

2020-09-04 15:06:04

Docker容器化Node.js

2013-05-17 09:41:02

Node.js云應(yīng)用開(kāi)發(fā)IaaS

2011-05-30 13:37:46

JSP

2012-01-05 09:18:30

貨幣化移動(dòng)應(yīng)用

2015-11-20 17:09:36

jsWeb應(yīng)用程序

2022-09-12 16:02:32

Docker安全Node.js

2016-09-28 20:05:22

2023-03-07 14:31:44

Node.jsPython應(yīng)用程序

2011-12-16 14:45:36

JavaJSP

2022-09-30 10:48:12

AR制造業(yè)

2024-03-18 10:15:00

HTTPNode.jsAPI

2020-01-15 14:20:07

Node.js應(yīng)用程序javascript

2022-12-14 14:40:27

Node.js開(kāi)發(fā)應(yīng)用程序

2013-10-16 15:56:41

虛擬化數(shù)據(jù)丟失

2024-03-27 11:18:02

2022-10-27 08:09:33

2023-04-18 15:57:30

2024-07-29 08:00:00

2011-03-21 17:07:37

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 中文在线а√在线8 | 日韩中文字幕高清 | 久综合| 亚洲三区视频 | av在线免费观看不卡 | 天天操网| 狠狠干夜夜草 | 美女在线观看国产 | 在线视频一区二区三区 | 国产一区不卡 | 精品久久久网站 | 国产99热 | 91久久精| 亚洲国产精品一区二区久久 | 国产欧美精品一区 | 日韩国产一区二区三区 | av中文在线播放 | 精品成人在线 | 一区二区三区在线免费观看 | 精品中文字幕一区二区三区 | 国产成人一区在线 | 亚洲人人 | 欧美日韩一区二区三区在线观看 | av一级久久| 欧美h版| 欧美视频精品 | 999www视频免费观看 | 福利精品| 日韩无| 欧美一级特黄aaa大片在线观看 | 蜜桃视频一区二区三区 | 精品av久久久久电影 | 久久久久久美女 | 成人午夜激情 | 日韩在线一区二区 | 一级a爱片久久毛片 | 久久激情视频 | 国产不卡视频在线 | 久久丝袜 | 日本高清视频网站 | 精品一区二区三区在线播放 |