将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可以完美地搭配。主要内容包括两部分:

  1. 通过Express创建一个简单的REST应用
  2. 将服务部署到Docker

通过Express创建一个简单的REST应用

  1. 准备
mkdir a09npm init -ynpm install express --save

创建一个data.json:

{"name": "Hello", "likes": ["wolrd", "node"]}
  1. 服务器代码

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}`);
  1. 测试:
    运行程序,通过浏览器访问:
http://localhost:3000/user

可以查看到返回的JSON数据。

将服务部署到Docker

  1. 构建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" ]
  1. 新建一个.dockerignore文件:
node_modules
npm-debug.log
  1. 构建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

大概几秒钟就构建完毕了。

  1. 运行容器:
docker run -p 3000:3000 -d rang/a09

容器也是秒级启动。

  1. 测试:

通过浏览器可以访问到服务:

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相关推荐

  1. node.js学习笔记

    # node.js学习笔记标签(空格分隔): node.js---## 一 内置模块学习 ### 1. http 模块 ``` //1 导入http模块 const http =require('ht ...

  2. node.js学习笔记14—微型社交网站

    node.js学习笔记14-微型社交网站 1.功能分析 微博是以用户为中心,因此需要有注册和登录功能. 微博最核心的功能是信息的发表,这个功能包括许多方面,包括:数据库访问,前端显示等. 一个完整的微 ...

  3. Node.js学习笔记8

    Node.js学习笔记8 HTTP服务器与客户端 Node.js的http模块,封装了一个高效的HTTP服务器和一个简易的HTTP客户端 http.server是一个基于事件的HTTP服务器,核心由N ...

  4. node.js学习笔记5——核心模块1

    node.js学习笔记5--核心模块1 Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node. ...

  5. node.js 学习笔记(二)模板引擎和C/S渲染

    node.js 学习笔记(二)模板引擎和C/S渲染 文章目录 node.js 学习笔记(二)模板引擎和C/S渲染 一.初步实现Apache功能 1.1 使用模板引擎 1.2 在 node 中使用模板引 ...

  6. 千锋Node.js学习笔记

    千锋Node.js学习笔记 文章目录 千锋Node.js学习笔记 写在前面 1. 认识Node.js 2. NVM 3. NPM 4. NRM 5. NPX 6. 模块/包与CommonJS 7. 常 ...

  7. 唤醒手腕 - 前端服务器端开发 Node.Js 学习笔记(学习中,更新中)

    唤醒手腕 - Node.Js 学习笔记 唤醒手腕个人的学习记录,时间在2021年12月13日 ~ 2021年12月14日,学习方式看官方文档和B站视频,如有错误或者代码问题的地方,欢迎C站大佬能够帮忙 ...

  8. Node.js (上)(超级详细的node.js学习笔记 !!!)

    目录 一.初识Node.js与内置模块 1.之前知识回顾(为Node.js理解做铺垫) 1.1浏览器中的js的组成部分 1.2 为什么js可以在浏览器中被执行 1.3 为什么浏览器可以操作Bom和Do ...

  9. 一个后端开发人员的node.js学习笔记(一)安装与第一个服务器

    2019独角兽企业重金招聘Python工程师标准>>> 1.Node.js的下载和安装 Node.js安装包及源码下载地址为:https://nodejs.org/en/downlo ...

  10. 有关node.js学习笔记

    Node.js 优势: 性能,node.js比php快86倍. 跟前台js配合方便 Node.js便于前端学习 运行node.js需要在所在目录运行node js能用的,node.js都能用 web- ...

最新文章

  1. 官方数据:5次SDN大会的背后
  2. linux bootstrap,Bootstrap示例
  3. tensorflow dataset_ops batch()方法 (将此数据集的连续元素合并为批)
  4. AFN框架和SDWebImage框架的上手体验
  5. Hadoop HIVE
  6. Android Studio3.0简介
  7. 模板:线段树标记永久化
  8. 拉卡拉2020年股东净利润9.31亿 积极布局数字人民币业务
  9. 资源 | 我拿到了斯坦福、UCL、CMU、NYU的offer,关于博士申请你需要知道的一切...
  10. 好用的画图软件推荐 亿图图示专家,媲美visio的操作方式,更加本地化的应用。
  11. php保存必应壁纸,README.md · 墨涩/自动下载每日必应壁纸到指定文件夹php源码 - Gitee.com...
  12. html word 分页符,怎么取消分页符(word文档如何取消分页)
  13. 洛谷P4939 Agent2(树状数组差分)
  14. AutoCAD二次开发规则重定义
  15. 连接计算机名提示输入网络凭据,Win10访问局域网共享文件时提示输入网络凭据如何解决...
  16. Excel2016 无法粘贴图片
  17. Java线程池(超详细)
  18. 织梦主动提交_织梦发布文章主动推送(实时)给百度的方法
  19. 《帝友P2P网络借贷系统》项目研发阶段性总结
  20. 用卷积神经网络和自注意力机制实现QANet(问答网络)

热门文章

  1. linux 磁盘 ssd 机械硬盘分区,linux(centos7)上的硬盘种类、结构、磁盘分区方式、分区结构...
  2. C++ signal和sigaction信号处理
  3. 进销存软件五花八门,跟着这份测评选准没错
  4. 马拉车(manacher)
  5. 六种主流身份验证方法
  6. MZOJ2007:路灯的改建计划
  7. python中Mongodb的Objectid 实现
  8. golang中:=是什么意思?
  9. 关于百度指数和实际搜索量之间关系的调查
  10. vue中后端返回word文件下载地址,实现文件预览功能