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 06 NodeJs
Jquery通过ajax请求NodeJS返回json数据实例
Nov 08 NodeJs
详解NodeJS框架express的路径映射(路由)功能及控制
Mar 24 NodeJs
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
Sep 06 NodeJs
详解使用vscode+es6写nodejs服务端调试配置
Sep 21 NodeJs
使用vs code开发Nodejs程序的使用方法
Sep 21 NodeJs
Nodejs中crypto模块的安全知识讲解
Jan 03 NodeJs
Nodejs实现多文件夹文件同步
Oct 17 NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 NodeJs
浅谈使用nodejs搭建web服务器的过程
Jul 20 NodeJs
Nodejs + sequelize 实现增删改查操作
Nov 07 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
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
关于vue面试题汇总
2018/03/20 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
js实现自定义右键菜单
2020/05/18 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
pytorch 修改预训练model实例
2020/01/18 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
HTML5地理定位与第三方工具百度地图的应用
2016/11/17 HTML / CSS
浅析HTML5 Landmark
2020/09/11 HTML / CSS
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
LVMH旗下最大的奢侈品网站平台:24S
2020/05/24 全球购物
联想C++笔试题
2012/06/13 面试题
员工培训邀请函
2014/02/02 职场文书
批评与自我批评材料
2014/02/15 职场文书
中班开学寄语
2014/04/04 职场文书
护理专科学生自荐书
2014/07/05 职场文书
私人房屋买卖协议书
2014/10/04 职场文书
新手必备Python开发环境搭建教程
2021/05/28 Python
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python