在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 相关文章推荐
使用TextRange获取输入框中光标的位
Oct 14 Javascript
JavaScript 通过模式匹配实现重载
Aug 12 Javascript
jQuery on()方法使用技巧详解
Apr 16 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
Jan 08 Javascript
jQuery实现两个select控件的互移操作
Dec 22 Javascript
protractor的安装与基本使用教程
Jul 07 Javascript
使用jQuery实现简单的tab框实例
Aug 22 jQuery
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
Aug 30 Javascript
JS中验证整数和小数的正则表达式
Oct 08 Javascript
小程序实现留言板
Nov 02 Javascript
node将geojson转shp返回给前端的实现方法
May 29 Javascript
JS如何定义用字符串拼接的变量
Jul 11 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中heredoc的使用方法
2013/06/17 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
php实现的漂亮分页方法
2014/04/17 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
javascript,jquery闭包概念分析
2010/06/19 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
2017/03/27 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
Vue filter介绍及详细使用
2018/04/04 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
python实现端口转发器的方法
2015/03/13 Python
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
软件设计的目标是什么
2016/12/04 面试题
医学院毕业生自荐信
2013/11/08 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
六一亲子活动总结
2014/07/01 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
工程款催款函
2015/06/24 职场文书
2016三八妇女节慰问信
2015/11/30 职场文书
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python