13.7.3 ExpressExpress作为Node.js的开发框架是目前最稳定、使用最广泛且官方推荐的Web开发框架。Express简洁、灵活它提供一系列强大的特性帮助开发者创建各种Web和移动设备应用。Express不对Node.js已有的特性进行二次抽象而只是在其之上扩展了Web应用所需的功能。它拥有丰富的HTTP工具以及来自Connect框架的中间件。读者可以使用Express快速又简单地创建强健和友好的API服务。1.使用官方镜像第一步安装Node.js的官方镜像作为基础镜像$ sudo docker pull node第二步安装Express在Docker Hub上的镜像$ sudo docker pull otium360/express第三步此镜像预设情况是1读者的Express项目有名为server.js的启动脚本。2读者的Express项目监听8080端口。此镜像将会给Express项目添加/express/package.json文件内含NPM的依赖关系如下所示然后将这些依赖包本地安装至/express文件夹1connect2express3serve-static此镜像的默认启动指令是CMD [npm, start]当然读者也可以通过自定义Dockerfile的方式进一步拓展镜像功能1由于此镜像会使用/express文件夹作为Node/Express应用的根目录所以需要拷贝server.js文件以及所有的应用代码至此目录下。2在应用的根目录新建一个Dockerfile文件# 下载基础镜像FROM otium360/express# 添加Node命令ADD server.js /express/server.jsADD www /express/wwwserver.js文件内容如下use strict;var connect require(connect);var serveStatic require(serve-static);var app connect();app.use(serveStatic(www {index: [index.html]}));app.listen(8080);console.log(MyApp is ready at http://localhost:8080);3使用自定义Dockerfile构建镜像$ sudo docker build -t my-app-express /path/to/your/Dockerfile4创建并运行此镜像$ sudo docker run -d -p 8080:8080 --name my-app-express my-app-express2.定制镜像除了以上方法读者也可以在Docker Hub自行搜索含node关键字的镜像然后改造其Dockerfile也可以运行Node容器。笔者给出以下Dockerfile供读者参考# 下载基础镜像FROM dockerfile/nodejs# 安装NPM管理器ADD package.json /express/package.jsonWORKDIR /expressRUN npm install# 使用8080端口EXPOSE 8080# 设置默认运行命令CMD [npm start]13.7.4 AngularJSAngularJS是一个JavaScript MVC框架。AngularJS很小只有60K兼容主流浏览器与jQuery配合良好。AngularJS项目由Google维护它是一款优秀的前端JavaScript框架已经用于Google的多款产品当中。笔者在此简述一下AngularJS的特性·数据绑定这可能是AngularJS最酷最实用的特性。它能够帮助你避免书写大量的初始代码从而节约开发时间。一个典型的web应用可能包含了80%的代码用来处理查询和监听DOM。数据绑定使得代码更少你可以专注于你的应用。·模板在AngularJS中一个模板就是一个HTML文件。但是HTML的内容扩展了包含了很多帮助你映射model到view的内容。·MVC针对客户端应用开发AngularJS吸收了传统的MVC基本原则。MVC或者Model-View-Controll设计模式针对不同的人可能意味不同的东西。AngularJS并不执行传统意义上的MVC更接近于MVVMModel-View-ViewModel。·依赖注入Dependency Injection即DIAngularJS拥有内建的依赖注入子系统可以帮助开发人员更容易的开发理解和测试应用。·Directives指令指令是我个人最喜欢的特性。你是不是也希望浏览器可以做点儿有意思的事情那么AngularJS可以做到。指令可以用来创建自定义的标签。它们可以用来装饰元素或者操作DOM属性。使用Docker Hub镜像第一步新建Angular项目文件夹并通过CLI进入此目录mkdir -p ~/Projects/Personal/nameOfProjectcd ~/Projects/Personal/nameOfProject第二步直接拷贝或者通过Git克隆一份项目代码$ git clone https://github.com/username/nameOfProject.git第三步安装Docker Hub上的Angular镜像$ sudo docker pull sesteva/grunt-angular第四步创建并运行Angular容器$ sudo docker run --name nameOfProject -p 9000:9000 -v ~/Projects/Personal/nameOfProject:/home/project -i -t sesteva/grunt-angular当然读者也可以通过修改Dockerfile来拓展和自定义镜像。笔者在此提供以下Dockerfile供读者参考#下载Yeoman基础镜像FROM sesteva/yeoman# 使用NPM安装Angular和CoffeeScriptRUN npm install -g generator-angular coffee-script# 创建目录RUN mkdir -p /home/projectCMD cd /home/project \npm install \bower install --allow-root \grunt serve# 设定工作目录WORKDIR /home/project# 使用9000端口EXPOSE 900013.7.5 相关资源JavaScript入门http://www.w3schools.com/js/Node.js官网http://www.nodejs.org/Node.js Docker Hub官方镜像https://registry.hub.docker.com/_/node/Node.js Docker Hub官方镜像标签https://registry.hub.docker.com/_/node/tags/manage/Express官网http://expressjs.com/Express Docker Hub镜像https://registry.hub.docker.com/u/otium360/express/Express Dockerfilehttps://registry.hub.docker.com/u/otium360organization/express/dockerfile/package.jsonhttps://www.npmjs.org/doc/files/package.json.html启动脚本https://www.npmjs.org/doc/misc/npm-scripts.html#default-valuesAngular官网http://angularjs.org/Angular Docker镜像https://registry.hub.docker.com/u/sesteva/grunt-angular/Angular Dockerfilehttps://registry.hub.docker.com/u/sesteva/grunt-angular/dockerfile/13.8 Go13.8.1 Go技术栈Go语言也称Golang是一个由Google主导研发的编程语言。它的语法清晰明了设计精良拥有一些先进的特性还有一个庞大的标准库。Go的基本设计理念是编译效率、运行效率和开发效率要三者兼顾。使用Go开发要让开发人员感觉到Python的便利C/C的运行效率以及小到可以被忽略的编译时间。笔者在此简述一下Go语言的特性·编译静态类型语言。由此可以提供满足对运行效率敏感的系统级应用。·垃圾回收去除复杂的内存释放工作。·简洁的符号和语法极力减少开发人员输入的字符数。·平坦的类型系统去除了复杂的继承关系。使用结构化类型系统Structural type system既简化了事前设计工作也为未来增加抽象层提供了非侵入式的解决方法。·基于CSP模型的并行简化了并发结构之间的通信和数据共享。为多核时代的程序开发打好基础。比线程更轻量的goroutine让一个线程可以执行多个并发结构。不必使用异步通信就足以达到线程池与select/poll/epoll的效果。极大简化了多连接的开发。·使用一套简单的规范开发人员不必再单独编写脚本指定依赖关系和编译流程。仅仅使用代码本身和go工具链就可以处理各种依赖关系。写完代码一条命令自动下来各种依赖直接编译/安装。无需make、autoconf、automake、setup.py等工具支持。使用官方镜像将Go代码运行在Docker容器中的最简方法就是将Go编译指令写入Dockerfile中然后使用此Dockerfile构建自定义镜像最后直接运行此镜像即可启动Go程序。具体步骤如下。第一步首先安装Go的Docker Hub官方镜像作为基础镜像$ sudo docker pull golang如果读者对Go的版本有要求可以在以上命令中加入Tag标签以便于在下一步的Dockerfile的FROM指令中明确Go版本号。官方镜像都有明确的标签列表具体地址可以参见后面的“相关资源”部分。第二步在Dockerfile中加入读者需要执行的Go编译命令FROM golang:1.3.1-onbuild注意我们使用的官方镜像带有onbuild标签也就意味着它包含了启动大部分Go项目所需的基本指令。在构建镜像的时候Docker会执行COPY./usr/src/appRUN go get-d-v以及go installv。在使用此镜像不带参数运行Go容器时此会执行CMD[app]指令。第三步使用此Dockerfile构建镜像$ sudo docker build -t my-golang-app .第四步创建并运行Go容器$ sudo docker run -it --rm --name my-running-app my-golang-app在Docker容器中编译Go项目如果读者需要在容器中编译Go代码但是不需要在容器中运行它可以执行$ sudo docker run --rm -v $(pwd):/usr/src/myapp -w /usr/src/myapp golang:1.3.1 go build -v此指令会将读者的Go项目文件夹作为Docker数据卷挂载至Docekr并作为运行目录。然后Docker会执行go build在工作目录中编译代码输出可执行文件至myapp。如果此项目有Makefile那么可以在容器中执行$ sudo docker run --rm -v $(pwd):/usr/src/myapp -w /usr/src/myapp golang:1.3.1 make在Docker容器中交叉编译Go项目如果读者需要在常用的linux\amd64架构之外的其他架构的平台编译Go应用如windows/386。可以在指令中加入cross标签$ sudo docker run --rm -v $(pwd):/usr/src/myapp -w /usr/src/myapp -e GOOSwindows -e GOARCH386 golang:1.3.1-cross go build -v读者也可以使用以下命令将Go程序一次性编译至多个平台$ sudo docker run --rm -it -v $(pwd):/usr/src/myapp -w /usr/src/myapp golang:1.3.1-cross bash$ for GOOS in darwin linux; do for GOARCH in 386 amd64; do go build -v -o myapp-$GOOS-$GOARCH done done如果读者需要方便地运行已有Go项目的代码特别是Web项目那么笔者推荐读者使用一个内含SSH服务的镜像以此为基础定制Go镜像。这样可以方便地使用SSH服务访问Go容器中的站点。13.8.2 BeegoBeego是一个使用Go的思维来帮助开发者构建并开发Go应用程序的开源框架。Beego使用Go开发思路来自于Tornado路由设计来源于Sinatra。笔者在此简述一下Beego框架的特性·简单化RESTful支持、MVC模型可以使用bee工具快速地开发应用包括监控代码修改进行热编译、自动化测试代码以及自动化打包部署。·智能化支持智能路由、智能监控可以监控QPS、内存消耗、CPU使用以及goroutine的运行状况让线上应用尽在掌握。·模块化Beego内置了强大的模块包括Session、缓存操作、日志记录、配置解析、性能监控、上下文操作、ORM模块、请求模拟等强大的模块足以支撑你任何的应用。·高性能Beego采用了Go原生的http包来处理请求goroutine的并发效率足以应付大流量的Web应用和API应用目前已经应用于大量高并发的产品中。1.准备工作第一步下载安装$ go get github.com/astaxie/beego第二步创建文件hello.gopackage mainimport github.com/astaxie/beegofunc main() {beego.Run()} 第三步编译运行$ go build -o hello hello.go$ ./hello第四步打开浏览器并访问http://localhost:8080。恭喜第一个Beego项目已经成功的构建了。读者可以查阅开发文档以进行深入学习。2.使用Docker Hub镜像读者可以使用Docker Hub提供的第三方Beego镜像下载后直接运行即可$ sudo docker pull cloudcube/beego3.定制镜像如果需要定制Beego镜像则如前文所述建议读者基于内含SSH的镜像进行定制。当然读者也可以参考以下Dockerfile构建自定义镜像FROM cloudcube/golang# system updateRUN apt-get update# install beegoRUN go get github.com/astaxie/beego# install beeRUN go get github.com/cloudcube/bee