使用Docker高效摆设Node.js利用的办法介绍
一个简便的 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: 一个最简化的 serverless
与 dockerize
示例。
NODE_ENV=production
在生产环境中,无需安置 devDependecies
中依靠,NODE_ENV 环境变量设定为 production 时将会跳过 devDep
。
# 通过设定环境变量,只安置生产环境依靠 $ NODE_ENV=production npm ci # 通过显式指定 flag,只安置生产环境依靠 $ npm ci --production
另一方面,某些第三方模块会按照 NODE_ENV 环境变量做出一些料想不到的配置。因此在生产环境留意该环境变量的配置。
一个 Node 利用的简便摆设
一个典型的、面向效劳端的 Node 利用是这么跑起来的:
npm install
npm run config
,从配置效劳(consul/vault)拉取配置 ,如数据库与缓存的账号密码,此时构建效劳器需要配置效劳权限npm run migrate
,数据库迁移足本,施行数据库表列行更换操纵,此时构建效劳器需要数据库拜访权限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 停止编译,而它依靠于 python
,make
与 g++
。
$ apk --no-cache add python make g++
在带有编译历程的镜像构建中,源文件与构建工具都会造成空间的白费。借助镜像的多阶段构建可以高效利用空间。Go App
与 FE App
的构建也遵照此规则。
- 多阶段构建 Go 利用
- 多阶段构建前端利用
在构建 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
相关文章
- N-API and getting started with writing C addons for Node.js
- Using Docker for Node.js in Development and Production