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

 更新时间:2016年09月02日 10:21:41   作者:李鹏  
这篇文章的目标是为了向大家展示如何在Docker的container里运行Node.js程序,文中通过图文与示例代码介绍的非常详细,有需要的朋友们可以参考借鉴。

一、前言

可能还有一些同学不了解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

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

三、创建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 run -d -p 8888:8888 ac5

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

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

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

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

docker logs 7350

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

七、测试

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

curl -i localhost:8888

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

八、总结

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

相关文章

  • 从零开始学习Node.js

    从零开始学习Node.js

    这篇文章主要介绍了从零开始学习Node.js结合具体实例形式分析了使用方法与相关注意事项,需要的朋友可以参考下,希望能够给你带来帮助
    2021-09-09
  • 用C/C++来实现 Node.js 的模块(一)

    用C/C++来实现 Node.js 的模块(一)

    这篇文章的主要内容其实简而言之就是——用C/C++来实现 Node.js 的模块,非常的不错,有需要的朋友可以参考下
    2014-09-09
  • 基于Express和Multer实现文件本地服务器文件上传功能

    基于Express和Multer实现文件本地服务器文件上传功能

    在现代应用程序中,文件上传功能成为了用户共享和存储数据的重要途径,所以本文我们一起来探讨文件上传中间件的重要性,并提供常见的实现方法和相应的代码吧
    2023-06-06
  • node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例

    node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例

    这篇文章主要介绍了node.js 使用 net 模块模拟 websocket 握手进行数据传递操作,结合实例形式分析了node.js基于net模块模拟 websocket握手相关原理及进行数据传递具体操作技巧,需要的朋友可以参考下
    2020-02-02
  • nodejs如何获取时间戳与时间差

    nodejs如何获取时间戳与时间差

    本文详细介绍了nodejs获取时间戳与时间差的多种方法,对平时nodejs的使用很有帮助,下面一起来看看吧。
    2016-08-08
  • 使用iojs的jsdom库实现同步系统时间

    使用iojs的jsdom库实现同步系统时间

    本文给大家分享的是使用iojs的jsdom库实现与http://open.baidu.com/special/time/ 同步系统时间。思路非常的清晰,这里推荐给大家,有需要的小伙伴可以参考下。
    2015-04-04
  • 如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)

    如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)

    这篇文章主要介绍了如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Nginx 配置多站点vhost 的方法

    Nginx 配置多站点vhost 的方法

    这篇文章主要介绍了Nginx 配置多站点vhost 的方法,需要的朋友可以参考下
    2018-01-01
  • 基于 Node.js 实现前后端分离

    基于 Node.js 实现前后端分离

    为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异。痛定思痛,今天我们重新思考了“前后端”的定义,引入前端同学都熟悉的NodeJS,试图探索一条全新的前后端分离模式。
    2016-04-04
  • nodejs multer实现文件上传与下载

    nodejs multer实现文件上传与下载

    这篇文章主要为大家详细介绍了nodejs multer实现文件上传与下载的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05

最新评论