首頁 > web前端 > js教程 > 主體

使用Docker高效部署Node.js應用的方法介紹

青灯夜游
發布: 2020-08-31 10:00:25
轉載
1938 人瀏覽過

使用Docker高效部署Node.js應用的方法介紹

一個合理且高效的部署方案,不僅能夠實現快速升級,平滑切換,負載平衡,應用隔離等部署特性,而且配有一套成熟穩定的監控。

kubernetes 把 Node 應用視為一個服務端應用的黑盒子,完美匹配了以上條件,越來越多的團隊把 node 部署在 k8s 上。 【影片教學推薦:node js教學Docker影片教學

但在此之前,需要先把Node 應用跑在一個Docker 容器上,這也是本章的主題。

關於前端在docker 上部署,作者曾經寫了幾篇文章:

  1. 如何在docker 部署前端
  2. 前端部署Prview 與Production
  3. 前端部署的發展過程

一個簡單的Node 應用

index.js

一個hello, world 版的Node Web App

const http = require('http')

const app = async (req, res) => {
  res.end('hello, world')
}

http.createServer(app).listen(3000, () => console.log(3000))
登入後複製

package.json

配置npm start 來啟動應用程式

"scripts": {
  "start": "node index.js"
},
登入後複製

但這只是最簡單的Node 應用,真實環境中還有各種資料儲存及定時任務排程等,暫撇開不談,這已經足夠了。

再稍微複雜一點點的 Node 應用可以查看山月的項目 whoami: 一個最簡化的 serverlessdockerize 範例。

NODE_ENV=production

在生產環境中,無需安裝devDependecies 中依賴,NODE_ENV 環境變數設定為production 時將會跳過#devDep

# 通过设置环境变量,只安装生产环境依赖
$ NODE_ENV=production npm ci

# 通过显式指定 flag,只安装生产环境依赖
$ npm ci --production
登入後複製

另一方面,某些第三方模組會根據 NODE_ENV 環境變數做出一些意料不到的配置。因此在生產環境注意該環境變數的配置。

一個Node 應用的簡單部署

一個典型的、服務端的Node 應用是這樣跑起來的:

  1. npm install
  2. #npm run config,從設定服務(consul/vault)拉取配置,例如資料庫與快取的帳號密碼,此時建置伺服器需要配置服務權限
  3. #npm run migrate,資料庫遷移腳本,執行資料庫表格列行更改操作,此時建置伺服器需要資料庫存取權
  4. npm start#,啟動一個Node 服務

把運行步驟翻譯成Dockerfile:

# 选择一个体积小的镜像 (~5MB)
FROM node:12-alpine

# 环境变量设置为生产环境
ENV NODE_ENV production

WORKDIR /code

# 更好的根据 Image Layer 利用缓存
ADD package.json package-lock.json /code
RUN npm ci

ADD . /code

# 配置服务及数据库迁移
RUN npm run config --if-present && npm run migrate --if-present

EXPOSE 3000
CMD npm start
登入後複製

這對於大部分Node 應用已經是足夠了,如果精益求精,可以再走接下來的多階段構建

node-gyp 與Native Addon

在Node 中有可能存在著一些Native Addon,它們透過node-gyp 進行編譯,而它依賴於pythonmakeg

$ apk --no-cache add python make g++
登入後複製

在有編譯過程的鏡像建置中,原始檔與建置工具都會造成空間的浪費。借助鏡像的多階段建構可以有效率地利用空間。 Go AppFE App 的建置也遵循此規則。

在建構Node 應用鏡像時,第一層鏡像用以建構node_modules

# 选择一个体积小的镜像 (~5MB)
FROM node:12-alpine as builder

# 环境变量设置为生产环境
ENV NODE_ENV production

# 更好的根据 Image Layer 利用缓存
ADD package.json package-lock.json ./
RUN npm ci

# 多阶段构建之第二阶段
# 多阶段构建之第二阶段
# 多阶段构建之第二阶段
FROM node:12-alpine

WORKDIR /code
ENV NODE_ENV production

ADD . .
COPY --from=builder node_modules node_modules
# 配置服务及数据库迁移
RUN npm run config --if-present && npm run migrate --if-present

EXPOSE 3000
CMD npm start
登入後複製

相關文章

  1. N-API and getting started with writing C addons for Node.js
  2. Using Docker for Node.js in Development and Production

更多程式設計相關知識,可存取:程式設計入門! !

以上是使用Docker高效部署Node.js應用的方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!