一个合理并且高效的部署方案,不仅能够实现快速升级,平滑切换,负载均衡,应用隔离等部署特性,而且配有一套成熟稳定的监控。
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。
#通过设置环境变量,只安装生产环境依赖$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
web前端工程师如何才能达到年薪50万
千锋武汉web前端小编跟大家整理一下,50W年薪的web前端是这样做的!1、核心技能必须学精的核心技能:HTML、CSS、Java、、HTTP 协议精通HTML+css是前端最简单、基础的要求,但最基础的知识要保证到你一定是了解的准确并且全面的。 Java是基础中的最核心知识,企业对js的掌握要求也越来越高,JS知识抽象、晦涩难懂,也有很多从事前端的开发者很长时间仍弄不懂原生JS。 2、开发工具+库+框架开发工具:git/svn、常用的 linux 命令、一款趁手的 ide/编辑器、charles库/框架:sass/less、vue/react/angular、reduxuex、express/koa/hapi3、测试+构建+部署测试:karma、mocha代码构建:webpack部署:docker、pm24、值得关注的新技术(1)PWA(Progressive Web Apps):由谷歌提出,用前沿的技术开发,让网页使用如同App般的体验的一系列方案。 (2)Type:由微软开发。 它是Java的一个超集,自由和开源的编程语言。 在这个语言中,添加了可选的静态类型和基于类的面向对象编程。 由下图说明type和Java的关系!(3)react、vue、angular三驾马车:2017年,react发展的迅猛,vue更是扮演框架黑马的角色,而angular虽然关注度不如以前,但是不容忽视!虽然说web前端沉淀的部分多了,学习线路逐渐清晰明朗起来,但在学习和提升的过程中也难免陷入误区,导致学习效率低下跟不上前端发展的节奏。
搭建hadoop集群用什么操作系统
Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中。 这篇教程介绍了利用Docker在单机上快速搭建多节点Hadoop集群的详细步骤。 作者在发现目前的HadooponDocker项目所存在的问题之后,开发了接近最小化的Hadoop镜像,并且支持快速搭建任意节点数的Hadoop集群。 GitHub:kiwanlau/hadoop-cluster-docker直接用机器搭建Hadoop集群是一个相当痛苦的过程,尤其对初学者来说。 他们还没开始跑wordcount,可能就被这个问题折腾的体无完肤了。 而且也不是每个人都有好几台机器对吧。 你可以尝试用多个虚拟机搭建,前提是你有个性能杠杠的机器。 我的目标是将Hadoop集群运行在Docker容器中,使Hadoop开发者能够快速便捷地在本机搭建多节点的Hadoop集群。 其实这个想法已经有了不少实现,但是都不是很理想,他们或者镜像太大,或者使用太慢,或者使用了第三方工具使得使用起来过于复杂。 下表为一些已知的HadooponDocker项目以及其存在的问题。 更快更方便地改变Hadoop集群节点数目另外,alvinhenrick/hadoop-mutinode项目增加节点时需要手动修改Hadoop配置文件然后重新构建hadoop-nn-dn镜像,然后修改容器启动脚本,才能实现增加节点的功能。 而我通过shell脚本实现自动话,不到1分钟可以重新构建hadoop-master镜像,然后立即运行!本项目默认启动3个节点的Hadoop集群,支持任意节点数的Hadoop集群。 另外,启动Hadoop,运行wordcount以及重新构建镜像都采用了shell脚本实现自动化。 这样使得整个项目的使用以及开发都变得非常方便快捷。 开发测试环境操作系统:ubuntu14.04和ubuntu12.04内核版本:3.13.0-32-genericDocker版本:1.5.0和1.6.2小伙伴们,硬盘不够,内存不够,尤其是内核版本过低会导致运行失败。
如何进入docker的node镜像
1.什么是docker?Docker allows you to package an application with all of its dependencies into a standardized unit For software 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。 几乎没有性能开销,可以很容易地在机器和数据中心中运行。 最重要的是,他们不依赖于任何语言、框架包括系统。 Docker 的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。 在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。 用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。 下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。 (图片来自Docker官方网站)简单入门Docker can build images automatically by reading the instructions from a Dockerfile. A Dockerfile is a text document that contains all the commands you would normally execute manually in order to build a Docker image. By calling docker build from your terminal, you can have Docker build your image step by step, executing the instructions 通过读取Dockerfile文件中的指令自动构建镜像。 Dcokerfile是一个文本文件,它包含了构建镜像所需要执行的全部命令。 执行docker build命令,Docker就会按照文档执行并最终创建一个镜像。 (这段话是翻译上面那段话的%>_<%)。 Dockerfile支持支持的语法命令如下:INSTRUCTION argument指令不区分大小写。 但是,命名约定为全部大写。 Dockerfile都必须以FROM命令开始。 FROM命令会指定镜像基于哪个基础镜像创建,接下来的命令也会基于这个基础镜像(译者注:CentOS和Ubuntu有些命令可是不一样的)。 FROM命令可以多次使用,表示会创建多个镜像。 具体语法如下:
发表评论