关键词:
🍁博主简介:
🏅云计算领域优质创作者
🏅新星计划第三季python赛道第一名
🏅阿里云ACE认证高级工程师
🏅阿里云开发者社区专家博主
✒️博主微信:15575411187
💊交流社区:小鹏linux(个人社区)欢迎您的加入!
目录
1. 关于JavaScript
JavaScript是目前所有主流浏览器上唯一支持的脚本语言,这也是早期JavaScript的唯一用途。Node.js的出现,让服务端应用也可以基于 JavaScript进行编写。 |
1.1 JavaScript 的历史
JavaScript 最初被称为 LiveScript,由 Netscape(Netscape Communications Corporation,网景通信公司)公司的布兰登·艾奇(Brendan Eich)在 1995 年开发。在 Netscape 与 Sun(一家互联网公司,全称为“Sun Microsystems”,现已被甲骨文公司收购)合作之后将其更名为了 JavaScript。 之所以将 LiveScript 更名为 JavaScript,是因为 JavaScript 是受 Java 的启发而设计的,因此在语法上它们有很多相似之处 ,JavaScript 中的许多命名规范也都借鉴自 Java,还有一个原因就是为了营销,蹭 Java 的热度。 |
同一时期,微软和 Nombas(一家名为 Nombas 的公司)也分别开发了 JScript 和 ScriptEase 两种脚本语言,与 JavaScript 形成了三足鼎立之势。它们之间没有统一的标准,不能互用。为了解决这一问题,1997 年,在 ECMA(欧洲计算机制造商协会)的协调下,Netscape、Sun、微软、Borland(一家软件公司)组成了工作组,并以 JavaScript 为基础制定了 ECMA-262 标准(ECMAScript)。 |
1.2 如何运行 JavaScript
作为一种脚本语言,JavaScript 代码不能独立运行,通常情况下我们需要借助浏览器来运行 JavaScript 代码,所有 Web 浏览器都支持 JavaScript。
|
1.3 JavaScript 的特点
JavaScript 具有以下特点: 1) 解释型脚本语言 JavaScript 是一种解释型脚本语言,与 C、C++ 等语言需要先编译再运行不同,使用 JavaScript 编写的代码不需要编译,可以直接运行。2) 面向对象 JavaScript 是一种面向对象语言,使用 JavaScript 不仅可以创建对象,也能操作使用已有的对象。3) 弱类型 JavaScript 是一种弱类型的编程语言,对使用的数据类型没有严格的要求,例如您可以将一个变量初始化为任意类型,也可以随时改变这个变量的类型。4) 动态性 JavaScript 是一种采用事件驱动的脚本语言,它不需要借助 Web 服务器就可以对用户的输入做出响应,例如我们在访问一个网页时,通过鼠标在网页中进行点击或滚动窗口时,通过 JavaScript 可以直接对这些事件做出响应。5) 跨平台 JavaScript 不依赖操作系统,在浏览器中就可以运行。因此一个 JavaScript 脚本在编写完成后可以在任意系统上运行,只需要系统上的浏览器支持 JavaScript 即可 |
2. 关于Node.js
Node.js自2009年发布,使用Google Chrome浏览器的V8引擎,采用事件驱动,性能优异。同时还提供了很多系统级API,如文件操作、网络编程等。 |
2.1 Node.js简介
JavaScript 诞生于 1995 年,几乎是和互联网同时出现;Node.js 诞生于 2009 年,比 JavaScript 晚了 15 年左右。 |
现在的 JavaScript 除了用于 Web 前端编程(网页编程),还能干很多事情,比如:
|
2.2 Node.js 的组成
Node.js 运行时主要由 V8 引擎、标准库和本地模块组成,尤其是本地模块的多少,从底层决定了 Node.js 功能的强弱。 |
1) V8 引擎
V8 引擎就是 JavaScript 解释器,它负责解析和执行 JavaScript 代码。 |
2) 本地模块
Node.js 集成了众多高性能的开源库,它们使用 C/C++ 语言实现,比如: |
模块 | 说明 |
---|---|
libuv | 一个跨平台的、基于事件驱动的异步 I/O 库。但是 libuv 不仅限于 I/O,它还提供了进程管理、线程池、信号处理、定时器等其它功能。 Linux 中一切皆文件,这里的 I/O 不仅仅包括文件读写,还包括数据库读写、网络通信(socket)等。 |
nmp | Node.js 包管理器,可以下载包、安装包、卸载包、更新包、上传包等。 |
http_parser | 一款由C语言编写的轻量级 HTTP 解析器,用以支持 Web 应用开发。 |
zlib | 工业级的数据压缩/解压模块,Nodejs 借助 zlib 来创建同步、异步或者流式的压缩/解压接口。 |
OpenSSL | 该模块提供了经过严密测试的许多加密/解密功能,现代 Web 依赖这些功能来实现安全性,比如 SSL 协议和 https 协议。 |
c-ares | 异步 DNS 查询和解析库。 |
Node.js 直接在计算机上运行 JavaScript 代码,并且要赋予 JavaScript 强大的能力,所以它的本地模块和浏览器中的运行时有很多大区别,甚至说几乎没有什么关联。Node.js 几乎完全抛弃了浏览器,自己从头构建了一套全新的 JavaScript 运行时。 |
3) 标准库
本地模块使用 C/C++ 编写,而 Node.js 面向 JavaScript 开发人员,所以必须要封装本地模块的 C/C++ 接口,提供一套优雅的 JavaScript 接口给开发人员,并且要保持接口在不同平台(操作系统)上的一致性。 |
3. 用Docker搭建和使用Node.js环境
Node.js拥有3种官方镜像:node:<version>、node:onbuild、node:slim。 |
其中常用的是带有版本标签的,以及带有onbuild标签的node镜像。 首先,在Node.js项目中新建一个Dockerfile: |
FROM node:4-onbuild
EXPOSE 8888
然后,新建server.js文件,内容如下: |
'use strict';
var connect = require('connect');
var serveStatic = require('serve-static');
var app = connect();
app.use('/', serveStatic('.', 'index': ['index.html']));
app.listen(8080);
console.log('MyApp is ready at http://localhost:8080');
之后,通过npm init命令来新建node项目所必须的package.json文件 |
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
name: (node) node
version: (1.0.0)
description: node-sample
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /Users/faxi/Docker/js/node/package.json:
"name": "node",
"version": "1.0.0",
"description": "node-sample",
"main": "index.js",
"scripts":
"test": "echo \\"Error: no test specified\\" && exit 1"
,
"author": "",
"license": "ISC"
Is this ok? (yes) yes
下面使用docker build指令构建node镜像: |
$ docker build -t node-image .
最后,创建并运行node容器: |
$ docker run -it -P node-image
npm info it worked if it ends with ok
npm info using npm@2.15.1
npm info using node@v4.4.3
npm info prestart node@1.0.0
npm info start node@1.0.0
> node@1.0.0 start /usr/src/app
> node server.js
MyApp is ready at http://localhost:8080
此时可以使用浏览器查看到MyApp应用的服务页面。 首先,使用docker ps指令查看端口绑定情况: |
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7b6f666d4808 node-image "npm start" xxxago Up xx 0.0.0.0:32771->8888/tcp node-container
如果只需要运行单个node脚本的容器,则无需通过Dockerfile构建镜像,可以使用以下指令: |
$ docker run -it --rm --name my-running-script -v "$(pwd)":/usr/src/myapp -w /usr/src/myapp node:0.10 node your-daemon-or-script.js
也可以参考node官方提供的最佳实践: https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md |
👑👑👑结束语👑👑👑
云原生之docker实战使用docker部署kodbox私有云
【云原生之Docker实战】使用docker部署kodbox私有云一、kodbox介绍1.kodbox简介2.kodbox功能与特点二、检查本地docker状态1.检查docker版本2.检查docker状态三、安装kodbox1.创建安装目录2.编辑docker-compose.yaml脚本3.创建相关容器4.查看容器状态... 查看详情
云原生|42docker快速部署高可靠性编程语言erlang
🍁博主简介: 🏅云计算领域优质创作者 🏅新星计划第三季python赛道第一名 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专家博主💊交流社区:C... 查看详情
云原生|37docker快速部署编程语言golang(代码片段)
🍁博主简介: 🏅云计算领域优质创作者 🏅新星计划第三季python赛道第一名 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专家博主✒️博主微信:1557... 查看详情
云原生之docker实战使用docker部署nacos平台
【云原生之Docker实战】使用docker部署nacos平台一、Nacos介绍1.Nacos简介2.Nacos作为配置中心作用3.Nacos的关键特性4.Nacos微服务架构图5.Nacos一致性架构图二、检查本地docker状态三、下载Nacos安装文件四、编辑安装yaml文件五、创建数据库... 查看详情
云原生之dokcer实战使用docker部署openwrt软路由
【云原生之Dokcer实战】使用Docker部署openwrt软路由一、openwrt介绍二、检查本地docker状态1.查看docker版本2.查看docker信息3.查看本地docker网络三、安装docker-compose1.一键安装docker-compose2.权限设置3.查看docker-compose版本四、环境配置1.配... 查看详情
云原生之docker实战使用docker部署部署doclever开源接口管理平台
【云原生之Docker实战】使用Docker部署部署DoClever开源接口管理平台一、DoClever介绍1.DoClever简介2.DOClever开发语言3.DOClever特点二、检查本地docker环境1.检查docker服务状态2.检查docker配置信息3.开启IPv4forwarding4.检查Docker版本三、检查宿... 查看详情
rainbond结合jpom实现云原生&本地一体化项目管理(代码片段)
...证书统一管理Rainbond与Jpom结合Rainbond与Jpom结合可以实现云原生项目和本地项目的统一管理,例如:使用Rainbond部署和管理Jpom可通过Jpom构建可容器化的云原生项目并部署在Rainbond上管理和运维通过Jpom管理一些无法容器化的传统项... 查看详情
云原生之docker实战使用docker部署showdoc文档工具(代码片段)
【云原生之Docker实战】使用Docker部署ShowDoc文档工具一、ShowDoc介绍1.ShowDoc简介2.ShowDoc功能二、检查docker版本三、检查docker状态四、下载ShowDoc镜像五、创建ShowDoc容器1.创建数据目录2目录授权3.运行ShowDoc容器4.查看ShowDoc容器状态5.查... 查看详情
云原生之docker实战使用docker部署siyuan个人笔记系统
【云原生之Docker实战】使用Docker部署siyuan个人笔记系统一、siyuan介绍二、检查宿主机系统版本三、检查本地docker环境1.检查docker服务状态2.检查docker配置信息3.开启IPv4forwarding四、下载siyuan镜像五、创建siyuan容器1.创建目录2.目录授... 查看详情
云原生之docker实战使用docker部署lychee照片管理平台
【云原生之Docker实战】使用Docker部署Lychee照片管理平台一、Lychee介绍二、检查宿主机系统版本三、检查本地docker环境1.检查docker服务状态2.检查docker配置信息3.开启IPv4forwarding四、下载Lychee镜像五、安装Lychee1.创建数据目录2.运行Lyc... 查看详情
『云原生·docker』docker中部署nginx(代码片段)
...主要分为以下六大部分,正在更新中,尽请期待!『云原生·生之门』『云原生·前置知识』『云原生·Docker』『云原生·Kubernetes』『云原生·KubeSphere』『云原生·DevOps』🚩点击关注本专栏提示:已经更新的或正在更新的... 查看详情
云原生之docker容器安装以及入门docker部署web应用&&云原生基石
一.前言1.1Docker是什么?Docker是一个应用打包、分发、部署的工具。基本就是一个轻量的虚拟机。虚拟机里只有我们需要的东西,其他多余的东西是必要的。我们看下图,来看一下它和普通的虚拟机对比图:如下:1.2打包、分发、... 查看详情
云原生之docker实战使用docker部署webssh工具
【云原生之Docker实战】使用docker部署webssh工具一、webssh介绍二、检查服务器系统版本三、检查本地docker环境1.检查docker服务状态2.检查docker版本四、安装docker-compose1.下载docker-compose二进制包2.给文件增加执行权限3.检查docker-compose... 查看详情
云原生之docker实战使用docker部署cloudreve公有云文件系统
【云原生之Docker实战】使用Docker部署Cloudreve公有云文件系统一、Cloudreve介绍1.Cloudreve简介2.Cloudreve特点二、检查本地docker环境1.检查docker服务状态2.检查docker配置信息3.开启IPv4forwarding4.检查Docker版本三、检查宿主机系统版本四、安... 查看详情
云原生之docker实战使用docker部署pingvinshare文件共享平台
【云原生之Docker实战】使用docker部署PingvinShare文件共享平台一、PingvinShare介绍1.PingvinShare简介2.PingvinShare特点二、检查本地docker环境1.检查docker版本2.检查docker状态3.检查dockercompose版本三、下载PingvinShare镜像四、docker-cli部署PingvinSh... 查看详情
云原生之docker实战使用docker部署ghost个人博客系统
【云原生之Docker实战】使用docker部署Ghost个人博客系统一、Ghost介绍二、检查docker环境1.检查docker版本2.检查docker状态3.检查dockercompose版本四、下载ghost镜像1.dockerhub下载镜像2.个人镜像仓库下载镜像五、使用docker-cli部署Ghost六、使... 查看详情
云原生之docker实战在docker环境部署answer问答平台
【云原生之Docker实战】在Docker环境部署Answer问答平台一、Answer介绍二、检查本地Docker环境1.检查本地Docker版本2.检查Docker状态3.检查dockercompose版本三、下载Answer镜像四、部署Answer应用1.创建部署目录2.编辑docker-compose.yaml文件3.创建A... 查看详情
云原生之docker实战部署docker管理平台shipyard
【云原生之Docker实战】部署docker管理平台shipyard一、shipyard介绍1.shipyard简介2.shipyard特点二、检查docker状态1.检查docker版本2.检查docker状态三、下载所需镜像1.下载alpine镜像2.下载library/rethinkdb镜像3.下载microbox/etcd镜像4.下载shipyard/doc... 查看详情