利用阿里云+docker实现简单的node.js服务

本篇文章给大家分享的内容是利用阿里云+docker实现简单的node.js服务,有着一定的参考价值,有需要的朋友可以参考一下

前提概要

实习的时候接触到docker,当时对其理解比较模糊。现在回学校做毕设,正好服务器这一块没人写,于是稍微复习了一下nodejs,买了个阿里云,摆弄了一下docker,搭建了个简单的服务器。

最终效果

主要是提供HTTP服务器,直接通过IP访问,提供两个示例:
http://120.77.148.92/point_info
http://120.77.148.92/point_info

这里写图片描述
这里写图片描述

主要步骤

1、配置阿里云(此点笔者自己选择,不多描述了)
2、nodejs服务代码
3、拷贝代码到服务器
4、使用dockerfile创建image并且搭建服务

nodejs服务代码

1、主要express提供服务器
2、数据库使用sqlite
3、图片上传服务器使用到connect-multiparty

主要目录如下:
这里写图片描述
主要文件只有server.js,代码在下方:

var express = require('express');var fs = require("fs");var sqlite3 = require('sqlite3');var multiparty = require('connect-multiparty');var app = express();app.use(express.static('public'));app.use(multiparty({uploadDir: './public/img'}));app.get('/', function (req, res) {    res.send('Hello World');});app.get('/device', function (req, res) {    var db = new sqlite3.Database("server.db");    db.all("SELECT * FROM device", function (err, row) {        res.send(row);        db.close();    });});app.get('/device_data', function (req, res) {    var db = new sqlite3.Database("server.db");    db.all("SELECT * FROM device_data", function (err, row) {        res.send(row);        db.close();    });});app.get('/point_info', function (req, res) {    var db = new sqlite3.Database("server.db");    db.all("SELECT * FROM point_info", function (err, row) {        res.send(row);        db.close();    });});var multipartMiddleware = multiparty();app.post('/info_post', multipartMiddleware, function (req, res) {    console.log(req.body, req.files);        var body = req.body;        var name = body.upload_name;        var type = body.upload_type;        var longitude = body.longitude;        var latitude = body.latitude;        var address = body.upload_address;        var time = body.upload_time;        var description = body.upload_description;        var status = body.approval_status;        var fileName = req.files.file.path.substring(11);        var resource = "http://" + req.headers.host + "/img/" + fileName;        console.log(resource);    var db = new sqlite3.Database("server.db");    var add = db.prepare("INSERT OR REPLACE INTO point_info " +        "(ID,upload_name, upload_type,longitude,latitude,upload_address,upload_time,upload_description," +        "approval_status,upload_resource) VALUES (?,?,?,?,?,?,?,?,?,?)");    add.run(null, name, type, longitude, latitude, address, time, description, status, resource);    add.finalize();    db.close();    res.end(JSON.stringify("success"));});app.get('/change_status', function (req, res) {    console.log(req.query);        var query = req.query;        var id = query.id;        var status = query.status;        var db = new sqlite3.Database("server.db");        var modify = db.prepare("UPDATE point_info set approval_status=? where id =?");        modify.run(status, id);    res.send("success");    modify.finalize();    db.close();});var server = app.listen(80, function () {    var host = server.address().address;        var port = server.address().port;    console.log("应用实例,访问地址为 http://%s:%s", host, port);        var db = new sqlite3.Database("server.db");    setInterval(function () {        console.log("change device_data");                for (var i = 0; i 

拷贝代码到服务器

笔者使用xshell模拟终端,直接通过图形化界面操作,截图如下:
这里写图片描述
这里写图片描述

通过dockefile创建image并且搭建服务

dockerfile内容如下:

FROM nodeCOPY ./project /homeWORKDIR /home/FloodServerEXPOSE 80CMD npm install

登录后复制

含义如下:

FROM node:该 image 文件继承官方的 node image。  COPY ./project /home:将当前目录下的project文件夹中所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/home目录。  WORKDIR /home/FloodServer:指定接下来的工作路径为/home/FloodServer。  EXPOSE 80:将容器 80 端口暴露出来, 允许外部连接这个端口。  CMD npm install:在容器启动后执行npm install安装依赖。

此时当前目录下有dockerfile文件和之前写的nodejs的服务代码。
写完dockerfile文件后,运行如下代码构建image:

docker image -t build my_node

登录后复制

-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。
构建完毕后,我们可以用docker image ls指令查看image。
这里写图片描述

image构建完毕,直接通过image创建container,指令如下:

docker run -p 80:80 -it my_node /bin/bash

登录后复制

各个参数意义如下:

-p参数:容器的 80端口映射到本机的 80端口。
 -it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。
 my_node:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
 /bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。

构建完container之后,容器的Shell映射到了当前的Shell,直接通过node server.js运行服务,服务搭建成功。
这里写图片描述

以上就是利用阿里云+docker实现简单的node.js服务的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2772694.html

(0)
上一篇 2025年3月8日 13:25:20
下一篇 2025年3月8日 13:28:58

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS随机排序数组

    这次给大家带来JS随机排序数组,JS随机排序数组的注意事项有哪些,下面就是实战案例,一起来看一下。 本文实例讲述了JS生成随机打乱数组的方法。分享给大家供大家参考,具体如下: 一、比较乱的排序方法 function fnLuanXu(num…

    编程技术 2025年3月8日
    200
  • JS实现计算器功能最简洁方法

    这次给大家带来JS实现计算器功能最简洁方法,JS实现计算器功能的注意事项有哪些,下面就是实战案例,一起来看一下。 具体代码: www.jb51.net JS计算器 // window.onload 获取元素getElementById wi…

    编程技术 2025年3月8日
    200
  • JS的一些隐式转换使用总结

    这次给大家带来JS的一些隐式转换使用总结,使用JS隐式转换的注意事项有哪些,下面就是实战案例,一起来看一下。 js中的不同的数据类型之间的比较转换规则如下: 1. 对象和布尔值比较 对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数…

    编程技术 2025年3月8日
    200
  • JS如何实现Ajax的请求函数

    这次给大家带来JS如何实现Ajax的请求函数,JS实现Ajax请求函数的注意事项有哪些,下面就是实战案例,一起来看一下。 一般我们写网页的时候,如果用到 Ajax 请求服务器,都是使用 JQuery 等已经封装好的库来调用,比较简单。 但是…

    编程技术 2025年3月8日
    200
  • 原生JS如何对多个滚动条同步操作

    这次给大家带来原生JS如何对多个滚动条同步操作,原生JS对多个滚动条同步操作的注意事项有哪些,下面就是实战案例,一起来看一下。 在一些支持用 markdown 写文章的网站,后台写作页面,一般都是支持 markdown 即时预览的,也就是将…

    编程技术 2025年3月8日
    200
  • vue.js的计算属性介绍

    本篇文章给大家分享的内容是vue.js的计算属性介绍,有着一定的参考价值,有需要的朋友可以参考一下 computed方法 -声明了一个计算属性 reversedMessage 。提供的函数将用作属性 vm.reversedMessage 的…

    编程技术 2025年3月8日
    200
  • AngularJS如何实现动态加载Controller

    本篇文章给大家分享的内容是AngularJS如何实现动态加载Controller,有着一定的参考价值,有需要的朋友可以参考一下 我们把实现动态加载Controller方法封装到一个通用的模块里面,并命名这个模块为ngCommon。 (fun…

    编程技术 2025年3月8日
    200
  • 怎样开发最优的JS模块

    这次给大家带来怎样开发最优的JS模块,开发最优JS模块的注意事项有哪些,下面就是实战案例,一起来看一下。 不少人都曾经在 npm 上发布过自己开发的 JavaScript 模块,而在使用一些模块的过程中,我经常产生“这个模块很有用,但如果能…

    编程技术 2025年3月8日
    200
  • JS怎么判断客户端类型

    这次给大家带来JS怎么判断客户端类型,JS判断客户端类型的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 我们在写响应式布局的时候,总要考虑是否是移动端,基于这个这里总结了4种方法判断客户端是否是ios或者android。分享出来供…

    编程技术 2025年3月8日
    200
  • 关于js设计模式的超详细介绍

    本篇文章给大家分享的内容是关于js设计模式的超详细介绍,有着一定的参考价值,有需要的朋友可以参考一下 js设计模式 Jan 14, 2017 | 学习笔记 | 3387 Hits 目录 前言 单体模式 工厂模式 迭代器模式 装饰者模式 策略…

    2025年3月8日
    200

发表回复

登录后才能评论