Docker中高效的部署Node应用 (docker常用命令)

教程大全 2025-07-17 08:50:21 浏览

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

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

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

一个简单的 Node 应用

「index.js」

一个 hello, world 版的 Node Web App

consthttp=require()constapp=async(req,res)=>{res.end()}http.createServer(app).listen(3000,()=>console.log(3000))

「package.json」

配置 npm start 来启动应用

但这仅仅是最简单的 Node 应用,真实环境中还有各种数据存储及定时任务调度等,暂撇开不谈,这已经足够了。

再稍微复杂一点点的 Node 应用可以查看山月的项目 whoAMI[5]: 一个最简化的 serverless 与 dockerize 示例。

NODE_ENV=production

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

Docker中高效的部署Node
#通过设置环境变量,只安装生产环境依赖$NODE_ENV=productionnpmci#通过显式指定flag,只安装生产环境依赖$npmci--production

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

一个 Node 应用的简单部署

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

npminstallnpmrunconfig,从配置服务(consul/vault)拉取配置,如数据库与缓存的账号密码,此时构建服务器需要配置服务权限npmrunmigrate,数据库迁移脚本,执行数据库表列行更改操作,此时构建服务器需要数据库访问权限npmstart,启动一个Node服务把运行步骤翻译为Dockerfile:#选择一个体积小的镜像(~5MB)FROMnode:12-alpine#环境变量设置为生产环境ENVNODE_ENVproductionWORKDIR/codeADDpackage.jsonpackage-lock.json/codeRUNnpmciADD./code#配置服务及数据库迁移RUNnpmrunconfig---present&&npmrunmigrate---presentEXPOSE3000CMDnpmstart

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

node-gyp 与 Native Addon

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

$apk--no-cacheaddpythonmakeg++

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

多阶段构建 Go 应用[6] 多阶段构建前端应用[7] 在构建 Node 应用镜像时,第一层镜像用以构造 node_modules。

#选择一个体积小的镜像(~5MB)FROMnode:12-alpineasbuilder#环境变量设置为生产环境ENVNODE_ENVproductionADDpackage.jsonpackage-lock.json./RUNnpmci#多阶段构建之第二阶段#多阶段构建之第二阶段#多阶段构建之第二阶段FROMnode:12-alpineWORKDIR/codeENVNODE_ENVproductionADD..COPY--from=buildernode_modulesnode_modules#配置服务及数据库迁移RUNnpmrunconfig---present&&npmrunmigrate---presentEXPOSE3000CMDnpmstart

harbor和docker的区别和联系

harbor和docker的联系是:二者都与程序有关。 harbor和docker的区别是:1. 概念方面:Project Harbor是由VMware公司中国团队为企业用户设计的Registry server开源项目,包括了权限管理(RBAC)、LDAP、审计、管理界面、自我注册、HA等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口。 2. 在英语解释方面:(1)harbor01n.海港;海湾;避难所;躲藏处。 02vt.& vi.心怀;庇护;避入安全地;(船)入港停泊。 例句:01HehadjumpedoverboardinNewYorkharborandswumtoshore.他在纽约港跳下船,游上了岸。 02Avillagesentirebeachandharborcanbefouledbyasinglerottingwhale一只腐烂的死鲸就足以弄脏一个村子的整片海滩和港口。

docker在web开发中得使用流程是怎样的

设想一个如下场景:我们需要一个webapp,其功能是用户注册并将注册信息插入到数据库,环境为Ubuntu+Tomcat+Mysql,怎么做?不使用Docker的话,我们通常会这样做,以Ubuntu为操作系统,然后安装Tomcat和MySQL,最后把app部署上就可以了。 那么使用Docker会怎么做呢,在这个场景下,可以有两种方式:1.仍然以Ubuntu为操作系统,然后构建一个安装有MySQL和Tomcat的Docker镜像,并把app部署到其中,最后启动Docker镜像就可以了。 看起来好像和不使用Docker基本相同,甚至还要麻烦一些,是这样吗?别着急,继续往下看。 2.第二种方式则体现了Docker的每个容器只做一件事情的思想,我们构建两个镜像,一个仅安装Tomcat并部署我们的app,另一个仅安装MySQL,然后启动这两个镜像,得到两个容器,再利用Docker的容器互联技术将二者连接(Docker的容器是通过http连接的)。

怎么配置node.js环境变量

win7安装好node后自动安装了npm1:使用webstorn创建express的项目会自动安装express2: 创建普通web项目,命令行中转到项目目录 使用npm install express安装express

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐