本篇文章给大家分享的内容是利用阿里云+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