日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

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

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

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

開發人員越來越多地轉向 node.js 應用程序優化服務;因此,簡化跨平臺應用程序的設計和發布過程非常重要。那么,讓我們進入文章的上下文。

Node App 容器化和優化建議

這里列出了七種容器化 node.js 應用程序的方法,所以讓我們簡要地看一下它們。

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

創建Docker映像時,應始終包含用于定義版本信息、預期目標(例如生產或測試)、穩定性或其他用于跨環境分發應用程序的相關信息的有用標簽。

在開發環境之外,您不應依賴 Docker 自動下載的最新標簽。使用最新版本的程序可能會導致奇怪甚至有害的影響。

假設您不斷更新到最新版本的圖像。在這種情況下,最終,其中一個更新肯定會包含一個全新的構建或未經測試的代碼,這將導致您的應用程序停止按預期運行。

以針對該節點的這個示例 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,而應使用 lts-buster Docker 映像。考慮到 lts-buster 是靜態圖片,這種方法可能更可取。

2.使用多階段構建

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

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

您可以在 Dockerfile 中創建多個階段來控制構建該映像的方式。您可以使用多層方法容器化您的 Node 應用程序。

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

要查看此操作的示例 Dockerfile,?請檢查以下內容:

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 <<EOFAPT-GET UPDATEAPT-GET INSTALL -Y --NO-INSTALL-RECOMMENDS GITEOF # INSTALL DOCKER TOOLS (CLI, BUILDX, COMPOSE)COPY --FROM=GLOURSDOCKER/DOCKER / /CMD [ "NPM", "RUN", "DEV" ]

我們首先在 node:lts-buster-slim 語句中添加一個 AS 開發標簽。這使我們可以在其他構建階段中引用此構建階段。接下來,我們添加一個標記為 dev-envs 的新開發階段。我們將使用這個階段來運行我們的開發。

現在,讓我們重建我們的形象并運行我們的開發。為了僅執行開發構建階段,我們將使用與之前相同的 docker build 命令,但這次我們將使用 —target 開發參數。

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

3.修復節點鏡像中的安全漏洞

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

使用經過驗證的圖像源和保持警惕的容器監控都是有用的安全措施。Docker Desktop 會通知您對新創建的 node:lts-buster-slim Docker 鏡像進行安全檢查。

讓我們借助 Docker Desktop 的 Snyk 插件看看我們的 Node.js 應用程序。首先在您的 mac、windows 或 linux PC 上設置 Docker Desktop 4.8.0+。接下來,選擇設置 > 擴展下的允許 Docker 擴展復選框。

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

放入 Snyk 并登錄網絡:

 

 

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

使用 Docker Desktop,掃描結果如下所示:

在此掃描期間,Snyk 發現了 70 個不同嚴重程度的漏洞。確定它們后,您可以開始修復它們以提高您的聲譽。

不僅如此。在 Dockerfile 上使用 docker scan 命令將執行漏洞掃描:

 

 

4. 利用健康檢查

HEALTHCHECK 指令指示 Docker 如何檢查容器的健康狀況。例如,這可用于確定 Web 服務器是否處于無限循環中并且無法接受新連接,即使服務器進程仍處于活動狀態。

# 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 <<EOFapt-get updateapt-get install -y --no-install-recommends gitEOF RUN <<EOFuseradd -s /bin/bash -m vscodegroupadd dockerusermod -aG docker vscodeEOF HEALTHCHECK CMD curl --fail http://localhost:3000 || exit 1 # install Docker tools (cli, buildx, compose)COPY --from=gloursdocker/docker / /CMD [ "npm", "run", "dev" ]

在生產階段,應用程序通常由 Kube.NETes 或服務結構等編排器管理。HEALTHCHECK 允許您通知編排器有關容器的健康狀況,這可能用于基于配置的管理。

這是一個很好的例子:?

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 相同的文件夾中創建一個 .dockerignore 文件以縮短構建時間。本指南需要您的 .dockerignore 文件中的一行:

NODE_MODULES

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

接下來,我將描述構建環境及其如此重要的原因。可以使用 Docker build 命令通過組合 Dockerfile 和“上下文”來創建 Docker 映像。在此設置中,您所做的一切都適用于您剛才給我的目錄結構或 URL。這些文件中的任何一個都可以在構建過程中使用。

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

如果您提供 .dockerignore 文件,我們可能會在創建新圖像時使用它來跳過項目的某些部分:代碼、配置文件、庫、插件等。例如,如果您想將節點模塊目錄保留在外面在您的構建中,您可以通過將以下內容添加到您的 .dockerignore 文件來實現。

后端

前端

 

 

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

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

這可以通過在 Dockerfile 中包含某些 USER 指令來實現。在執行映像以及任何未來的 RUN、CMD 或 ENTRYPOINT 指令時,USER 命令指定所需的用戶名(或 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 <<EOFAPT-GET UPDATEAPT-GET INSTALL -Y --NO-INSTALL-RECOMMENDS GITEOF RUN <<EOFUSERADD -S /BIN/BASH -M VSCODEGROUPADD DOCKERUSERMOD -AG DOCKER VSCODEEOF# INSTALL DOCKER TOOLS (CLI, BUILDX, COMPOSE)COPY --FROM=GLOURSDOCKER/DOCKER / /CMD [ "NPM", "START" ]

7. 探索 Node 的優雅關閉選項

在 Docker 中為 Node.js 創建的臨時存儲空間。它們很容易預防、銷毀,然后更換或重新利用。可以通過向進程提供 SIGTERM 信號來終止容器。

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

另一方面,Node.js 對于成功關閉應用程序至關重要,因為它從操作系統接收并傳遞 SIGINT 和 SIGTERM 等信號。由于 Node.js,您的應用程序可以選擇如何響應它接收到的信號。

如果你不為他們編程或使用一個模塊,你的應用程序將無法正常終止。但是,它將繼續正常運行,直到 Docker 或Kubernetes由于超時而終止它。

如果您無法修改應用程序的代碼,您仍然可以在 Dockerfile 中使用 docker run —init 或 tini init 選項。但是,建議您提供代碼來管理適當的信號處理以實現正常關閉。

結論

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

分享到:
標簽:容器
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定