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爬虫获取数据简单实现代码
Mar 29 NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 NodeJs
nodejs个人博客开发第二步 入口文件
Apr 12 NodeJs
Nodejs 和Session 原理及实战技巧小结
Aug 25 NodeJs
NodeJS收发GET和POST请求的示例代码
Aug 25 NodeJs
nodejs 日志模块winston的使用方法
May 02 NodeJs
Nodejs调用Dll模块的方法
Sep 17 NodeJs
Nodejs模块的调用操作实例分析
Dec 25 NodeJs
nodejs搭建本地服务器并访问文件操作示例
May 11 NodeJs
分享node.js实现简单登录注册的具体代码
Apr 26 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
根德Grundig S400/S500/S700电路分析
2021/03/02 无线电
php笔记之:数据类型与常量的使用分析
2013/05/14 PHP
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
Javascript入门学习资料收集整理篇
2008/07/06 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
AngularJS中$http服务常用的应用及参数
2016/08/22 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
jquery实现左右滑动式轮播图
2017/03/02 Javascript
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
2018/11/26 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
跟老齐学Python之永远强大的函数
2014/09/14 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
python小项目之五子棋游戏
2019/12/26 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
keras中的History对象用法
2020/06/19 Python
PyCharm+Miniconda3安装配置教程详解
2021/02/16 Python
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
数控技术专业毕业自荐书范文
2014/02/05 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
Java的Object类的九种方法
2022/04/13 Java/Android
如何通过cmd 连接阿里云服务器
2022/04/18 Servers