本文为minimicall原创文章,转载需注明出处:http://blog.csdn.net/minimicall
在继《阿里云部署Docker》之后,我决定系统的出一系列《Docker从入门到精通》的深度记录文章,这源于有一天图灵出版社的一个编辑联系我,问我有没有兴趣写Docker方面的书籍进行出版。
本文的目标是建立一个Docker web app。这样,你就可以直观的感受,docker是如何部署一个web应用。
首先,我们建立一个空目录来存放我们需要的文件。
我们建立的是一个node.js的web服务应用。我们需要在当前目录下建立如下三个文件。
1)
.gitignore
node_modules/*
2)package.json
{ "name": "docker-centos-hello", "private": true, "version": "0.0.1", "description": "Node.js Hello world app on CentOS using docker", "author": "Daniel Gasienica <daniel@gasienica.ch>", "dependencies": { "express": "3.2.4" } }
3)server.js
var express = require('express'), app = express(), redis = require('redis'), RedisStore = require('connect-redis')(express), server = require('http').createServer(app); app.configure(function() { app.use(express.cookieParser('keyboard-cat')); app.use(express.session({ store: new RedisStore({ host: process.env.REDIS_HOST || 'localhost', port: process.env.REDIS_PORT || 6379, db: process.env.REDIS_DB || 0 }), cookie: { expires: false, maxAge: 30 * 24 * 60 * 60 * 1000 } })); }); app.get('/', function(req, res) { res.json({ status: "ok" }); }); var port = process.env.HTTP_PORT || 3000; server.listen(port); console.log('Listening on port ' + port);
配置Dockerfile
我们需要通过Dockerfile来配置我们的docker镜像。
FROM ubuntu:14.04 MAINTAINER zengjinlong <470910357@qq.com> RUN apt-get update #Install Redis RUN apt-get -y -qq install python redis-server RUN apt-get -y -qq install wget #Install Node RUN cd /opt && \ wget http://nodejs.org/dist/v0.10.33/node-v0.10.33-linux-x64.tar.gz && \ tar -xzf node-v0.10.33-linux-x64.tar.gz && \ mv node-v0.10.33-linux-x64 node && \ cd /usr/local/bin && \ ln -s /opt/node/bin/* . && \ rm -f /opt/node-v0.10.33-linux-x64.tar.gz #Set the working directory WORKDIR /src j CMD ["/bin/bash"]
有了Dockerfile之后,就可以通过docker build来建立我们的镜像。
docker build -t minimicall/node_web:0.1 .
这里需要说明的是,你需要灵活的根据你的ubuntu真实的环境来变化中间的指令。例如,当我们第一次执行的时候,告诉我找不到python redis-server,我想应该是我的apt 源太out了,所以,我加了RUN apt-get update.就解决了这个问题。
当我wget的时候,说没有这个指令,那么我就得安装wget.而nodejs的地址,也是我去从nodejs的官网查找的。所以碰到问题,具体问题具体分析。
查看我们建立的镜像。
micall@micall-ThinkPad:~/docker/nodejs_web_app$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE minimicall/node_web 0.1 730770dff17f 6 minutes ago 268.7 MB centos centos6 70441cac1ed5 2 weeks ago 215.8 MB ubuntu 14.04 5506de2b643b 4 weeks ago 199.3 MB
启动我们的镜像:
sudo docker run -i -t --rm \ > -p 3000:3000 \ > -v `pwd`:/src \ > minimicall/node_web:0.1
这时候我们已经进入到了这个镜像启动的容器里面了。
root@d80a2ed6b4c0:/src#
执行下列命令
root@d80a2ed6b4c0:/src# npm install --quiet > /dev/null npm WARN engine formidable@1.0.13: wanted: {"node":"<0.9.0"} (current: {"node":"0.10.33","npm":"1.4.28"}) root@d80a2ed6b4c0:/src# npm install -g nodemon --quiet > /dev/null root@d80a2ed6b4c0:/src# ls Dockerfile Dockerfile~ index.js~ package.json server.js src Dockerfile.centos index.js node_modules package.json~ server.js~ root@d80a2ed6b4c0:/src# nodemon server.js 22 Nov 14:37:31 - [nodemon] v1.2.1 22 Nov 14:37:31 - [nodemon] to restart at any time, enter `rs` 22 Nov 14:37:31 - [nodemon] watching: *.* 22 Nov 14:37:31 - [nodemon] starting `node server.js` Listening on port 3000
这个时候用浏览器打开:http://localhost:3000/,会的到如下结果。
{ "status": "ok" }
第一个web 应用就到这里。后面我们会补充更多的细节说明。
时间: 2024-10-28 20:26:56