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的前后端分离的思考与实践(一)全栈式开发
Sep 26 NodeJs
nodejs开发环境配置与使用
Nov 17 NodeJs
Nodejs如何复制文件
Mar 09 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
Express与NodeJs创建服务器的两种方法
Feb 06 NodeJs
async/await与promise(nodejs中的异步操作问题)
Mar 03 NodeJs
详解nodeJS中读写文件方法的区别
Mar 06 NodeJs
NodeJs测试框架Mocha的安装与使用
Mar 28 NodeJs
详解nodejs操作mongodb数据库封装DB类
Apr 10 NodeJs
解析NodeJS异步I/O的实现
Apr 13 NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 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
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
Javascript算符的优先级介绍
2013/03/20 Javascript
自定义jQuery选项卡插件实例
2013/03/27 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
vue里input根据value改变背景色的实例
2018/09/29 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
js实现多个标题吸顶效果
2020/01/08 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
用Python shell简化开发
2018/08/08 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
2018/12/05 Python
python 内置模块详解
2019/01/01 Python
Python docx库用法示例分析
2019/02/16 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
New Balance美国官网:运动鞋和健身服装
2017/04/11 全球购物
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
大班上学期幼儿评语
2014/04/30 职场文书
小学少先队活动总结
2015/05/08 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
《社戏》教学反思
2016/02/22 职场文书
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript