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 npm install全局安装和本地安装的区别
Jun 05 NodeJs
Nodejs极简入门教程(一):模块机制
Oct 25 NodeJs
nodejs开发环境配置与使用
Nov 17 NodeJs
Nodejs实战心得之eventproxy模块控制并发
Oct 27 NodeJs
详解Nodejs的timers模块
Dec 22 NodeJs
NodeJs测试框架Mocha的安装与使用
Mar 28 NodeJs
nodejs mysql 实现分页的方法
Jun 06 NodeJs
解决Nodejs全局安装模块后找不到命令的问题
May 15 NodeJs
NodeJS加密解密及node-rsa加密解密用法详解
Oct 12 NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
Dec 12 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
推荐php模板技术[转]
2007/01/04 PHP
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
nodejs教程之异步I/O
2014/11/21 NodeJs
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
2017/02/08 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
Flask框架 CSRF 保护实现方法详解
2019/10/30 Python
python将数组n等分的实例
2019/12/02 Python
Pytorch之parameters的使用
2019/12/31 Python
python各层级目录下import方法代码实例
2020/01/20 Python
浅析python中的del用法
2020/09/02 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
八一慰问活动方案
2014/02/07 职场文书
英语国培研修感言
2014/02/13 职场文书
运动会入场词50字
2014/02/20 职场文书
前处理班长职位说明书
2014/03/01 职场文书
2014年城市管理工作总结
2014/12/02 职场文书
索赔员岗位职责
2015/02/15 职场文书
施工安全保证书
2015/05/09 职场文书
Django rest framework如何自定义用户表
2021/06/09 Python
MySQL Server 层四个日志
2022/03/31 MySQL