偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

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

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

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

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

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

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

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

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

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

以針對該節(jié)點的這個示例 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)建

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

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

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

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

要查看此操作的示例 Dockerfile,請檢查以下內(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語句添加一個標(biāo)簽。這使我們可以在其他構(gòu)建階段中引用此構(gòu)建階段。接下來,我們添加一個標(biāo)記為 的新開發(fā)階段DEV-ENVS。我們將使用這個階段來運行我們的開發(fā)。

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

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

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

為了創(chuàng)建現(xiàn)代服務(wù),程序員經(jīng)常使用已有的第三方軟件。但是,在將第三方軟件集成到您的項目中時一定要謹(jǐn)慎,因為它可能存在安全漏洞。

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

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

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

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

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

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

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

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

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

4. 利用健康檢查

該HEALTHCHECK指令指示 Docker 如何檢查容器的運行狀況。例如,這可用于確定 Web 服務(wù)器是否處于無限循環(huán)中并且無法接受新連接,即使服務(wù)器進程仍處于活動狀態(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)容器的健康狀況,這可能用于基于配置的管理。

這是一個很好的例子:

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)建一個.dockerignore文件以縮短構(gòu)建時間。本指南需要您的 .dockerignore 文件中的一行:

NODE_MODULES

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

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

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

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

后端

前端

6.出于安全目的以非根用戶身份運行

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

USR這可以通過在 Dockerfile 中包含某些指令來實現(xiàn)。在執(zhí)行圖像和任何未來的RUN、CMD或ENTRYPOINT指令時,該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)閉選項

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

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

另一方面,Node.js 對于成功關(guān)閉應(yīng)用程序至關(guān)重要,因為它接收并傳遞來自SIGINT操作系統(tǒng)SIGTERM的信號。由于 Node.js,您的應(yīng)用程序可以選擇如何響應(yīng)它接收到的信號。

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

如果您無法修改應(yīng)用程序的代碼,您仍然可以在 Dockerfile 中使用 docker run —init 或 tini init 選項。但是,建議您提供代碼來管理適當(dāng)?shù)男盘柼幚硪詫崿F(xiàn)正常關(guān)閉。

結(jié)論

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

責(zé)任編輯:華軒 來源: 今日頭條
相關(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)用開發(fā)IaaS

2011-05-30 13:37:46

JSP

2012-01-05 09:18:30

貨幣化移動應(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開發(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

點贊
收藏

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