Docker是怎样来部署一个web应用的
发布日期:2016-7-11 21:7:42
本文的目标是建立一个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 "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" }
|