在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 的 prototype问题。
Jan 03 Javascript
一个可以随意添加多个序列的tag函数
Jul 21 Javascript
jquery 学习之二 属性 文本与值(text,val)
Nov 25 Javascript
prettify 代码高亮着色器google出品
Dec 28 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
Dec 20 Javascript
node.js中的console.info方法使用说明
Dec 09 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
Apr 16 Javascript
javascript弹性运动效果简单实现方法
Jan 08 Javascript
javascript与PHP动态往类中添加方法对比
Mar 21 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
May 27 Javascript
vuex实现数据状态持久化
Nov 11 Javascript
Vuex的热更替如何实现
Jun 05 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
PHP+MYSQL的文章管理系统(一)
2006/10/09 PHP
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
Javascript基础教程之数据类型 (字符串 String)
2015/01/18 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
react同构实践之实现自己的同构模板
2019/03/13 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
javascript实现日历效果
2019/06/17 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
简析Python的闭包和装饰器
2016/02/26 Python
python使用PIL给图片添加文字生成海报示例
2018/08/17 Python
详解python 破解网站反爬虫的两种简单方法
2020/02/09 Python
python操作yaml说明
2020/04/08 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
几道PHP面试题
2013/04/14 面试题
管理学专业个人求职信范文
2013/09/21 职场文书
《画》教学反思
2014/04/14 职场文书
法制宣传月活动总结
2014/04/29 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
信用卡工资证明范本
2015/06/19 职场文书
童年读书笔记
2015/06/26 职场文书
工作会议简报
2015/07/20 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书