Node.js学习笔记9-将Node应用部署到Docker
将Node应用部署到Docker
阅读这篇blog大约需要10分钟
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
Docker的优点:
- 快速一致地交付应用。
- 响应式部署和扩展。
- 在同一硬件上运行更多工作负载。
Good code is short, simple, and symmetrical—the challenge is figuring out how to get there. --Sean Parent
介绍
Node.js本身就是一个快速构建应用的环境,和Docker可以完美地搭配。主要内容包括两部分:
- 通过Express创建一个简单的REST应用
- 将服务部署到Docker
通过Express创建一个简单的REST应用
- 准备
mkdir a09npm init -ynpm install express --save
创建一个data.json:
{"name": "Hello", "likes": ["wolrd", "node"]}
- 服务器代码
server.js
const data = require('./data');
const express = require('express');const PORT = 3000;
const HOST = '0.0.0.0';const app = express();app.get('/user', (req, res) => {res.send(data);
});app.listen(PORT, HOST);console.log(`Running on http://${HOST}:${PORT}`);
- 测试:
运行程序,通过浏览器访问:
http://localhost:3000/user
可以查看到返回的JSON数据。
将服务部署到Docker
- 构建Dockerfile
新建一个Dockerfile:
FROM node:latest# Create app directory
WORKDIR /usr/src/app# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./RUN npm install
# If you are building your code for production
# RUN npm ci --only=production# Bundle app source
COPY . .EXPOSE 3000
CMD [ "node", "server.js" ]
- 新建一个.dockerignore文件:
node_modules
npm-debug.log
- 构建Docker镜像
通过docker build来构建镜像:
docker build -t <your username>/<your imagename> .
在命令行输入:
docker build -t rang/a09 .
输出:
Sending build context to Docker daemon 20.99kB
Step 1/7 : FROM node:latest---> 2f1ff44a8bb5
Step 2/7 : WORKDIR /usr/src/app---> Using cache---> e57bfbf7a84e
Step 3/7 : COPY package*.json ./---> a820cfd03931
Step 4/7 : RUN npm install---> Running in 50a219d625ad
npm WARN exp01@1.0.0 No description
npm WARN exp01@1.0.0 No repository field.added 50 packages from 37 contributors and audited 126 packages in 97.618s
found 0 vulnerabilitiesRemoving intermediate container 50a219d625ad---> 419121cda361
Step 5/7 : COPY . .---> 16db3371aff5
Step 6/7 : EXPOSE 3000---> Running in 05b89cf2b4ff
Removing intermediate container 05b89cf2b4ff---> 96359e1075c8
Step 7/7 : CMD [ "node", "server.js" ]---> Running in 95cb9f195d76
Removing intermediate container 95cb9f195d76---> bcf82dfe8b41
Successfully built bcf82dfe8b41
Successfully tagged rang/a09:latest
大概几秒钟就构建完毕了。
- 运行容器:
docker run -p 3000:3000 -d rang/a09
容器也是秒级启动。
- 测试:
通过浏览器可以访问到服务:
http://localhost:3000/user
小结
可以看到很快地开发了一个REST API,然后通过Docker本地部署。有了Node.js和Docker这两大武器以后,就可以超级快速的开发部署云应用。
项目代码
- nodejs-blogs/a09
参考阅读
https://hub.docker.com/_/node/
https://nodejs.org/en/docs/guides/nodejs-docker-webapp/
https://www.runoob.com/docker/docker-tutorial.html
Node.js学习笔记9-将Node应用部署到Docker相关推荐
- node.js学习笔记
# node.js学习笔记标签(空格分隔): node.js---## 一 内置模块学习 ### 1. http 模块 ``` //1 导入http模块 const http =require('ht ...
- node.js学习笔记14—微型社交网站
node.js学习笔记14-微型社交网站 1.功能分析 微博是以用户为中心,因此需要有注册和登录功能. 微博最核心的功能是信息的发表,这个功能包括许多方面,包括:数据库访问,前端显示等. 一个完整的微 ...
- Node.js学习笔记8
Node.js学习笔记8 HTTP服务器与客户端 Node.js的http模块,封装了一个高效的HTTP服务器和一个简易的HTTP客户端 http.server是一个基于事件的HTTP服务器,核心由N ...
- node.js学习笔记5——核心模块1
node.js学习笔记5--核心模块1 Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node. ...
- node.js 学习笔记(二)模板引擎和C/S渲染
node.js 学习笔记(二)模板引擎和C/S渲染 文章目录 node.js 学习笔记(二)模板引擎和C/S渲染 一.初步实现Apache功能 1.1 使用模板引擎 1.2 在 node 中使用模板引 ...
- 千锋Node.js学习笔记
千锋Node.js学习笔记 文章目录 千锋Node.js学习笔记 写在前面 1. 认识Node.js 2. NVM 3. NPM 4. NRM 5. NPX 6. 模块/包与CommonJS 7. 常 ...
- 唤醒手腕 - 前端服务器端开发 Node.Js 学习笔记(学习中,更新中)
唤醒手腕 - Node.Js 学习笔记 唤醒手腕个人的学习记录,时间在2021年12月13日 ~ 2021年12月14日,学习方式看官方文档和B站视频,如有错误或者代码问题的地方,欢迎C站大佬能够帮忙 ...
- Node.js (上)(超级详细的node.js学习笔记 !!!)
目录 一.初识Node.js与内置模块 1.之前知识回顾(为Node.js理解做铺垫) 1.1浏览器中的js的组成部分 1.2 为什么js可以在浏览器中被执行 1.3 为什么浏览器可以操作Bom和Do ...
- 一个后端开发人员的node.js学习笔记(一)安装与第一个服务器
2019独角兽企业重金招聘Python工程师标准>>> 1.Node.js的下载和安装 Node.js安装包及源码下载地址为:https://nodejs.org/en/downlo ...
- 有关node.js学习笔记
Node.js 优势: 性能,node.js比php快86倍. 跟前台js配合方便 Node.js便于前端学习 运行node.js需要在所在目录运行node js能用的,node.js都能用 web- ...
最新文章
- 官方数据:5次SDN大会的背后
- linux bootstrap,Bootstrap示例
- tensorflow dataset_ops batch()方法 (将此数据集的连续元素合并为批)
- AFN框架和SDWebImage框架的上手体验
- Hadoop HIVE
- Android Studio3.0简介
- 模板:线段树标记永久化
- 拉卡拉2020年股东净利润9.31亿 积极布局数字人民币业务
- 资源 | 我拿到了斯坦福、UCL、CMU、NYU的offer,关于博士申请你需要知道的一切...
- 好用的画图软件推荐 亿图图示专家,媲美visio的操作方式,更加本地化的应用。
- php保存必应壁纸,README.md · 墨涩/自动下载每日必应壁纸到指定文件夹php源码 - Gitee.com...
- html word 分页符,怎么取消分页符(word文档如何取消分页)
- 洛谷P4939 Agent2(树状数组差分)
- AutoCAD二次开发规则重定义
- 连接计算机名提示输入网络凭据,Win10访问局域网共享文件时提示输入网络凭据如何解决...
- Excel2016 无法粘贴图片
- Java线程池(超详细)
- 织梦主动提交_织梦发布文章主动推送(实时)给百度的方法
- 《帝友P2P网络借贷系统》项目研发阶段性总结
- 用卷积神经网络和自注意力机制实现QANet(问答网络)