docker中编译nodejs并使用nginx启动


Posted in NodeJs onJune 23, 2017

1.编译Nodejs

要进行Nodejs编译,使用docker就变得非常的方便了。

首先从hub.docker.com下载最新的镜像。https://hub.docker.com/_/node/

docker中编译nodejs并使用nginx启动

一般的项目都使用的是node6的镜像。

docker pull node:6-alpine

然后就可以直接使用npm install了。

Alpine是一个非常小的操作系统,在编译,运行docker非常喜欢使用这个系统,因为小,占用磁盘小,下载速度快,部署也快。

节省磁盘空间,节省部署时间。

2.使用docker镜像提前下载库

但是遇到一个问题,就是下载编译的时间太长了。

一般使用nodejs进行开发的时候都有一个package.json 里面具体的项目依赖 包,下载这个依赖需要很长时间。一般使用阿里云的镜像安装。

npm install --registry=https://registry.npm.taobao.org

而在使用docker 进行构建,编译的时候每次都是要下载这些依赖。大大增加了编译的时间。

FROM docker.io/library/node:6-alpine

RUN echo -e "http://mirrors.aliyun.com/alpine/v3.4/main\n\

http://mirrors.aliyun.com/alpine/v3.4/community" > /etc/apk/repositories

COPY package.json /root/

RUN cd /root && npm install --registry=https://registry.npm.taobao.org

可以提前将镜像下载好,然后在编译。做一个基础的镜像。如下:

构建这个基础镜像:

docker build -t my-demo/node6-alpine:latest .

在利用这个镜像进行编译:

#!/bin/sh

mkdir /app && cd /app

git clone xxx.git /app

ln -s /root/.gnupg /app/.gnupg

ln -s /root/.npm /app/.npm

ln -s /root/node_modules /app/node_modules

npm install --registry=https://registry.npm.taobao.org

npm run build

build.sh

然后利用这个基础镜像进行编译,生气了之前的instal 过程。

期中的node_modules是node的模块文件夹。编译后的文件在dist文件夹内。

3.使用nginx启动

首先从https://hub.docker.com/_/nginx/  下载一个镜像:

docker中编译nodejs并使用nginx启动

FROM docker.io/library/nginx:1-alpine

ADD ./dist/* /usr/share/nginx/html/

EXPOSE 80

ENTRYPOINT ["nginx","-g","daemon off;"]

使用nginx镜像启动,直接将node编译后的文件放到html目录

编译docker :

docker build -t my-demo/nginx:latest .

启动docker:

docker run -itd -p 8080:80 my-demo/nginx:latest

然后直接访问 8080 端口就可以了。

总结:

(首发,请勿转载。)

现在前后端的拆分,可以提高开发效率。但是部署起来稍微麻烦,需要前后的分别进行编译,前端编译也需要很长时间。可以提前将依赖库大成一个node基础镜像,然后再进行编译,这样可以大大的提高编译时间。同时运行环境使用一个nginx,将html,css,js等资源文件都放上,也才20多MB。而且在nginx中也可以将后台api在进行配置,将前后端集成进来。同时docker的镜像大大的提高了开发效率,环境的安装问题一下子得到了解决。

NodeJs 相关文章推荐
nodejs中实现路由功能
Dec 29 NodeJs
Nodejs 获取时间加手机标识的32位标识实现代码
Mar 07 NodeJs
nodejs入门教程六:express模块用法示例
Apr 24 NodeJs
配置nodejs环境的方法
May 13 NodeJs
手把手教你把nodejs部署到linux上跑出hello world
Jun 19 NodeJs
nodejs接入阿里大鱼短信验证码的方法
Jul 10 NodeJs
nodejs爬虫初试superagent和cheerio
Mar 05 NodeJs
深入理解NodeJS 多进程和集群
Oct 17 NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 NodeJs
搭建一个nodejs脚手架的方法步骤
Jun 28 NodeJs
NodeJS有难度的面试题(能答对几个)
Oct 09 NodeJs
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
Aug 20 NodeJs
NodeJs中express框架的send()方法简介
Jun 20 #NodeJs
深入浅析Nodejs的Http模块
Jun 20 #NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 #NodeJs
NodeJS 实现手机短信验证模块阿里大于功能
Jun 19 #NodeJs
手把手教你把nodejs部署到linux上跑出hello world
Jun 19 #NodeJs
CentOS 安装NodeJS V8.0.0的方法
Jun 15 #NodeJs
详解Nodejs之npm&package.json
Jun 15 #NodeJs
You might like
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
2015/09/29 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
JS去除字符串的空格增强版(可以去除中间的空格)
2009/08/26 Javascript
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
JS根据生日算年龄的方法
2015/05/05 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
为什么Python中没有"a++"这种写法
2018/11/27 Python
详解Python3注释知识点
2019/02/19 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
Python连接Impala实现步骤解析
2020/08/04 Python
python代码实现图书管理系统
2020/11/30 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
事业单位公务员的职业生涯规划
2014/01/15 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
商场周年庆活动方案
2014/08/19 职场文书
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js