在Docker快速部署Node.js应用的详细步骤


Posted in Javascript onSeptember 02, 2016

一、前言

可能还有一些同学不了解docker这个项目,docker是由go语言编写的,一个快速部署的轻量级虚拟技术项目,他允许开发人员将自己的程序和运行环境一起打包,制作成一个docker的image(镜像),这样部署到服务器上,也只需要下载这个image就可以将程序跑起来,免去每次都安装各种依赖和环境的麻烦,还能够做到应用程序之间的隔离

二、实现准备

我会先创建一个简单的Node.js web app,来构建一个镜像。然后基于这个Image运行一个container。从而实现快速部署。

由于网络的原因我的Node.js镜像从国内的镜像库下载,而不是Docker Hub。

先从国内的镜像网站上pull下一下nodejs镜像。     

docker pull hub.c.163.com/nce2/nodejs:0.12.2

在Docker快速部署Node.js应用的详细步骤

下载完后查看我们的镜像,找到他的名称,等会我们会用到

在Docker快速部署Node.js应用的详细步骤

三、创建Node.js 程序

创建package.json,并写入相关信息和依赖

vi package.json
{
 "name": "webtest",
 "version": "1.0.0",
 "description": "Node.js on Docker",
 "author": "lpxxn",
 "main": "server.js",
 "scripts": {
 "start": "node server.js"
 },
 "dependencies": {
 "express": "^4.13.3"
 }
}

创建server.js

vi server.js

写一个最简单web 这个web基于express框架,返回Hello word.注意我们监听的是8888端口

'use strict';

var express = require('express');

var PORT = 8888;

var app = express();
app.get('/', function (req, res) {
 res.send('Hello world\n');
});

app.listen(PORT);
console.log('Running on http://localhost:' + PORT);

四、创建Dockerfile

接下来主角上场了创建Dockerfile文件 这个文件是创建镜像所必须的文件

vi Dockerfile

Docker会依照Dockerfile的内容来构建一个镜像。我先给出完整的代码,再一行一行的给出解释

FROM hub.c.163.com/nce2/nodejs:0.12.2

# Create app directory
RUN mkdir -p /home/Service
WORKDIR /home/Service

# Bundle app source
COPY . /home/Service
RUN npm install

EXPOSE 8888
CMD [ "npm", "start" ]

我们来一句一句的解释

FROM hub.c.163.com/nce2/nodejs:0.12.2

FROM是构建镜像的基础源镜像,hub.c.163.com/nce2/nodejs:0.12.2 这个是镜像的名称,也就是我们一开始从国内服务器上拉下来的那个Image。如果本地没有Docker 会自己pull镜像。

# Create app directory
RUN mkdir -p /home/Service
WORKDIR /home/Service

第一句RUN 用于在Image里创建一个文件夹,将来用于保存我们的代码。

第二句WORKDIR是将我们创建的文件夹做为工作目录。

# Bundle app source
COPY . /home/Service
RUN npm install

第一句的COPY是把本机当前目录下的所有文件拷贝到Image的/home/Service文件夹下。

第二句的RUN 使用npm 安装我们的app据需要的所有依赖。

EXPOSE 8888

由于我们的web app监听的是8888端口,我们把这个端口暴露给主机,这样我就能从外部访问web了。

CMD [ "npm", "start" ]

这个我相信我不用解释你也能看出来他是做什么的。运行npm start命令,这个命令会运行 node service.js来

启动我们的web app。

五、构建Image

在你Dockerfile文件所在的目录下运行下面的命令来构建一个Image.

docker build -t mynodeapp .

别忘了最后的的那个点

在Docker快速部署Node.js应用的详细步骤

构建完后查看一下我们的镜像

在Docker快速部署Node.js应用的详细步骤

六、运行镜像

docker run -d -p 8888:8888 ac5

-d 表明容器会在后台运行,-p 表示端口映射,把本机的8888商品映射到container的8888端口这样外网就能通过本机的8888商品访问我们的web了。

后面的ac5是我们Image的ID因为前3个就已经能定位出这个Image所以我就没有把后边的再写出来。

通过docker ps 查看我们刚运行的Container的ID

在Docker快速部署Node.js应用的详细步骤

打印log  7370就是我们的Container ID,和Image ID一样,你也可以全写出来,我比较懒就写前4位,已经足够标识出这个Container了

docker logs 7350

在Docker快速部署Node.js应用的详细步骤

如果你想到Container里可以执行下面的命令,进入到里边后就可以像操作普通的linux 一样。如果想退出可执行exit命令。

在Docker快速部署Node.js应用的详细步骤

七、测试

我们先通过curl 看能不能访问我们的web。

curl -i localhost:8888

在Docker快速部署Node.js应用的详细步骤

也可以通过浏览器来看一下

在Docker快速部署Node.js应用的详细步骤

八、总结

好了,这个小教程到此就结束了,大家都学会了吗?希望这篇文章能帮助你入门。如果有什么问题或者疑问可以留言交流。谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
javascript实现日历控件(年月日关闭按钮)
Dec 12 Javascript
javascript检测对象中是否存在某个属性判断方法小结
May 19 Javascript
微信小程序 教程之引用
Oct 18 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
Jan 08 Javascript
javascript基本数据类型和转换
Mar 17 Javascript
angular学习之ngRoute路由机制
Apr 12 Javascript
es6 字符串String的扩展(实例讲解)
Aug 03 Javascript
Javascript中prototype与__proto__的关系详解
Mar 11 Javascript
Vue.js中的computed工作原理
Mar 22 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
Jul 20 Javascript
layui获取多选框中的值方法
Aug 15 Javascript
Vue props中Object和Array设置默认值操作
Jul 30 Javascript
CSS3 3D 技术手把手教你玩转
Sep 02 #Javascript
js实现StringBuffer的简单实例
Sep 02 #Javascript
纯JS实现可拖拽表单的简单实例
Sep 02 #Javascript
vue.js入门教程之绑定class和style样式
Sep 02 #Javascript
js绘制购物车抛物线动画
Nov 18 #Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
Sep 02 #Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
Sep 02 #Javascript
You might like
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
七款最流行的PHP本地服务器分享
2013/02/19 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
2013/10/29 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
javascript 文档的编码问题解决
2009/03/01 Javascript
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
jquery根据属性和index来查找属性值并操作
2014/07/25 Javascript
JS中Location使用详解
2015/05/12 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
Python文件和流(实例讲解)
2017/09/12 Python
基于python 取余问题(%)详解
2020/06/03 Python
高考考python编程是真的吗
2020/07/20 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
Python类的继承super相关原理解析
2020/10/22 Python
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
中医药大学市场营销专业自荐信
2013/09/29 职场文书
毕业设计计划书
2014/01/09 职场文书
出生医学证明样本
2014/01/17 职场文书
学生党员公开承诺书
2014/05/28 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
报名委托书
2015/01/29 职场文书
2015年读书月活动总结
2015/03/26 职场文书
西安事变观后感
2015/06/12 职场文书
干部外出学习心得体会
2016/01/18 职场文书