去年买了一本docker书,本来想玩玩,可是了各种事情,一直闲着,最近在玩nodejs,突然想起可以把他们两个合一起玩。
我做过一段时间的APP后台开发,主要是RESTful API开发,主要使用C++和PHP开发,这期间还开源了一个FastCGI开发的框架ccfast。那么玩nodejs也是弄弄restful api开发。js的语法比较简单,20分钟差不多,然后看的nodejs入门那边书,其中讲了nodejs开发的基础,以及怎么写一个可扩展的程序框架,我在它之上修改了一点点,然后写了个python脚本,自动生成一个基础文件。
zhou@zhou-K42JE:~/work/nodejs/nodejs_project_template/test$ ls
app.js config_router.js router.js
config_app.js request_handler.js server.j
app是程序入口文件,server封装了httpServer,router封装了路由函数,request_handler为具体的处理函数,还有就是路由和app的配置参数。
添加一个handler处理很简单,只要在request_handler添加一个function,和在路由配置中将pathname和handler配置就行了.
function test(request, response) {
response.writeHead(200, {'Content-type' : 'text/html'});
response.write("test");
response.end();
}
exports.test = test;
router_mapping['/text'] = request_handler.test;
这样我们使用 nodejs app.js运行程序,然后curl http://localhost:8888/test
运行了。
写一个简单的Dockerfile来build我们的一个镜像。
FROM daocloud.io/ubuntu:14.04
MAINTAINER zhx910322@163.com
RUN mkdir -p /app
WORKDIR /app
COPY test/* /app/
RUN apt-get update
RUN apt-get install -y nodejs
EXPOSE 8888
ENTRYPOINT ["nodejs", "app.js"]
我们使用了国内的容器服务提供商daocloud的提供的服务比较快。
docker build --no-cache=true -t docker_dev/nodejs_t_demo:0.1 .
使用上面命令build镜像
docker run -d -P docker_dev/nodejs_t_demo:0.1
基于上面build的镜像启一个容器。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c662bfb455ce docker_dev/nodejs_t_demo:0.1 "nodejs app.js" About an hour ago Up About an hour 0.0.0.0:1025->8888/tcp agitated_babbage
我们的程序在后台运行,容器中的8888端口映射在本地的1025端口,可以我curl http://localhost:1025
没有输出,不知道什么原因,还需努力学习啊。
相关代码:https://git.oschina.net/zhouX/nodejs_project_template.git