在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 相关文章推荐
jQuery使用手册之二 DOM操作
Mar 24 Javascript
JavaScript 实现模态对话框 源代码大全
May 02 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
Feb 23 Javascript
Extjs4中Form的使用之本地hiddenfield
Nov 26 Javascript
jQuery控制TR显示隐藏的三种常用方法
Aug 21 Javascript
基于jquery实现表格无刷新分页
Jan 07 Javascript
javascript关于继承解析
May 10 Javascript
Bootstrap页面布局基础知识全面解析
Jun 13 Javascript
JS数组去重(4种方法)
Mar 27 Javascript
vue-cli配置文件——config篇
Jan 04 Javascript
vue与原生app的对接交互的方法(混合开发)
Nov 28 Javascript
【js设计模式】SOLID五大设计原则
Mar 24 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
基于文本的搜索
2006/10/09 PHP
php设计模式 Adapter(适配器模式)
2011/06/26 PHP
php绘图中显示不出图片的原因及解决
2014/03/05 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
JS DOM 操作实现代码
2010/08/01 Javascript
javascript定义函数的方法
2010/12/06 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
浅析javascript中的DOM
2015/03/01 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
JS使用post提交的两种方式
2015/12/03 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
微信小程序 循环及嵌套循环的使用总结
2017/09/26 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
使用Python编写基于DHT协议的BT资源爬虫
2016/03/19 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
中间件分为哪几类
2012/03/14 面试题
中专毕业生的自我鉴定
2013/12/01 职场文书
数学系毕业生求职信
2014/05/29 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
2015年安全生产月活动总结
2015/03/26 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
2015年小学校长工作总结
2015/05/19 职场文书