千家信息网

Docker如何高效部署Node应用

发表于:2025-02-11 作者:千家信息网编辑
千家信息网最后更新 2025年02月11日,本篇内容介绍了"Docker如何高效部署Node应用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!❝
千家信息网最后更新 2025年02月11日Docker如何高效部署Node应用

本篇内容介绍了"Docker如何高效部署Node应用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

❝ 如何在生产环境部署一个 Node 应用?[1]❞

一个合理并且高效的部署方案,不仅能够实现快速升级,平滑切换,负载均衡,应用隔离等部署特性,而且配有一套成熟稳定的监控。

kubernetes 把 Node 应用视作一个服务端应用的黑盒子,完美匹配了以上条件,越来越多的团队把 node 部署在 k8s 上。

但在此之前,需要先把 Node 应用跑在一个 Docker 容器上,这也是本章的主题。

一个简单的 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[5]: 一个最简化的 serverless 与 dockerize 示例。

NODE_ENV=production

在生产环境中,无需安装 devDependecies 中依赖,NODE_ENV 环境变量设置为 production 时将会跳过 devDep。

# 通过设置环境变量,只安装生产环境依赖$ NODE_ENV=production npm ci# 通过显式指定 flag,只安装生产环境依赖$ npm ci --production

另一方面,某些第三方模块会根据 NODE_ENV 环境变量做出一些意料不到的配置。因此在生产环境注意该环境变量的配置。

一个 Node 应用的简单部署

一个典型的、面向服务端的 Node 应用是这么跑起来的:

npm installnpm run config,从配置服务(consul/vault)拉取配置 ,如数据库与缓存的账号密码,此时构建服务器需要配置服务权限npm run migrate,数据库迁移脚本,执行数据库表列行更改操作,此时构建服务器需要数据库访问权限npm start,启动一个 Node 服务把运行步骤翻译为 Dockerfile:# 选择一个体积小的镜像 (~5MB)FROM node:12-alpine# 环境变量设置为生产环境ENV NODE_ENV productionWORKDIR /code# 更好的根据 Image Layer 利用缓存ADD package.json package-lock.json /codeRUN npm ciADD . /code# 配置服务及数据库迁移RUN npm run config --if-present && npm run migrate --if-presentEXPOSE 3000CMD npm start

这对于大部分 Node 应用已经是足够了,如果精益求精,可以再走接下来的多阶段构建

node-gyp 与 Native Addon

在 Node 中有可能存在着一些 Native Addon,它们通过 node-gyp 进行编译,而它依赖于 python,make 与 g++。

$ apk --no-cache add python make g++

在带有编译过程的镜像构建中,源文件与构建工具都会造成空间的浪费。借助镜像的「多阶段构建」可以高效利用空间。Go App 与 FE App 的构建也遵循此规则。

多阶段构建 Go 应用[6] 多阶段构建前端应用[7] 在构建 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-alpineWORKDIR /codeENV NODE_ENV productionADD . .COPY --from=builder node_modules node_modules# 配置服务及数据库迁移RUN npm run config --if-present && npm run migrate --if-presentEXPOSE 3000CMD npm start

"Docker如何高效部署Node应用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

应用 环境 阶段 服务 配置 数据 生产 变量 数据库 镜像 缓存 接下来 体积 体积小 内容 更多 服务器 权限 知识 空间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 庄河天气预报软件开发 软件开发太难了找工作了 创建数据库提示已存在 服务器机房搭建多少钱 连城县公安局网络安全大队 网上祭奠软件开发教程 软件开发公司需要的资质及费用 交通运输部网络安全岗位职责 数据库实现排名 国家网络安全是属于什么部门 SP视频软件开发 网络安全防范 现状是什么 网络安全幼儿园报道 代理软件开发 如何运用党建数据库 珠海无限软件开发价格走势 数据库切换正式表 杭州网络安全公司主要在哪里 湖南违停预警数据接入服务器厂家 四川网络技术服务报价 工业互联网网络安全图片 河南子宸网络技术有限公司 网络安全法在线考试 网络安全防范 现状是什么 长春智慧校园软件开发 网络安全舆情处理应急预案 安卓图像处理软件开发 莱阳ios软件开发哪家靠谱 哪里有服务好的网络安全等保 网络安全监督检查信息报告
0