在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优先加载笔记代码
Sep 30 Javascript
js输出列表实现代码
Sep 12 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
May 24 Javascript
JQuery里面的几种选择器 查找满足条件的元素$("#控件ID")
Aug 23 Javascript
window.showModalDialog()返回值的学习心得总结
Jan 07 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
Mar 24 Javascript
jQuery图片缩放插件smartZoom使用实例详解
Aug 25 jQuery
JS实现的透明度渐变动画效果示例
Apr 28 Javascript
微信小程序实现人脸识别
May 25 Javascript
jquery实现垂直无限轮播的方法分析
Jul 16 jQuery
JavaScript canvas实现跟随鼠标事件
Feb 10 Javascript
jquery实现上传图片功能
Jun 29 jQuery
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之第五天
2006/10/09 PHP
PHP学习之PHP运算符
2006/10/09 PHP
UCenter Home二次开发指南
2009/05/28 PHP
php 魔术方法使用说明
2009/10/20 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
destoon之一键登录设置
2014/06/21 PHP
PHP 实现类似js中alert() 提示框
2015/03/18 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
Jquery插件之多图片异步上传
2010/10/20 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
超实用的JavaScript表单代码段
2016/02/26 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
vue初始化动画加载的实例
2018/09/01 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
对python过滤器和lambda函数的用法详解
2019/01/21 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
世界上最好的帽子:Tilley
2016/11/27 全球购物
经典c++面试题四
2015/05/14 面试题
iostream与iostream.h的区别
2015/01/16 面试题
刚毕业大学生自荐信范文
2014/02/20 职场文书
公司股权转让协议书
2014/04/12 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python