中国领先的IT技术网站
|
|

【Docker】Docker是如何部署一个web应用的

本文的目标是建立一个Docker web app。这样,你就可以直观的感受,docker是如何部署一个web应用。

作者:MiniMicall来源:MiniMicall的专栏|2014-11-25 14:04

开发者大赛路演 | 12月16日,技术创新,北京不见不散


在继《阿里云部署Docker》之后,我决定系统的出一系列《Docker从入门到精通》的深度记录文章,这源于有一天图灵出版社的一个编辑联系我,问我有没有兴趣写Docker方面的书籍进行出版。

本文的目标是建立一个Docker web app。这样,你就可以直观的感受,docker是如何部署一个web应用。

首先,我们建立一个空目录来存放我们需要的文件。

我们建立的是一个node.js的web服务应用。我们需要在当前目录下建立如下三个文件。

1).gitignore

  1. node_modules/*  

2)package.json

  1.   "name""docker-centos-hello"
  2.   "private"true
  3.   "version""0.0.1"
  4.   "description""Node.js Hello world app on CentOS using docker"
  5.   "author""Daniel Gasienica <daniel@gasienica.ch>"
  6.   "dependencies": { 
  7.     "express""3.2.4" 
  8.   } 

3)server.js

  1. var express = require('express'), 
  2. app = express(), 
  3. redis = require('redis'), 
  4. RedisStore = require('connect-redis')(express), 
  5. server = require('http').createServer(app); 
  6.  
  7. app.configure(function() { 
  8. app.use(express.cookieParser('keyboard-cat')); 
  9. app.use(express.session({ 
  10. store: new RedisStore({ 
  11. host: process.env.REDIS_HOST || 'localhost'
  12. port: process.env.REDIS_PORT || 6379
  13. db: process.env.REDIS_DB || 0 
  14. }), 
  15. cookie: { 
  16. expires: false
  17. maxAge: 30 * 24 * 60 * 60 * 1000 
  18. })); 
  19. }); 
  20.  
  21. app.get('/', function(req, res) { 
  22. res.json({ 
  23. status: "ok" 
  24. }); 
  25. }); 
  26.  
  27. var port = process.env.HTTP_PORT || 3000
  28. server.listen(port); 
  29. console.log('Listening on port ' + port); 

配置Dockerfile

我们需要通过Dockerfile来配置我们的docker镜像。

  1. FROM ubuntu:14.04 
  2. MAINTAINER zengjinlong <470910357@qq.com> 
  3.  
  4. RUN apt-get update 
  5.  
  6. #Install Redis 
  7. RUN apt-get -y -qq install python redis-server 
  8.  
  9. RUN apt-get -y -qq install wget 
  10.  
  11. #Install Node 
  12. RUN cd /opt && \ 
  13. wget http://nodejs.org/dist/v0.10.33/node-v0.10.33-linux-x64.tar.gz && \ 
  14. tar -xzf node-v0.10.33-linux-x64.tar.gz && \ 
  15. mv node-v0.10.33-linux-x64 node && \ 
  16. cd /usr/local/bin && \ 
  17. ln -s /opt/node/bin/* . && \ 
  18. rm -f /opt/node-v0.10.33-linux-x64.tar.gz 
  19.  
  20. #Set the working directory 
  21. WORKDIR /src 
  22. CMD ["/bin/bash"

有了Dockerfile之后,就可以通过docker build来建立我们的镜像。

  1. docker build -t minimicall/node_web:0.1 . 

这里需要说明的是,你需要灵活的根据你的ubuntu真实的环境来变化中间的指令。例如,当我们第一次执行的时候,告诉我找不到python redis-server,我想应该是我的apt 源太out了,所以,我加了RUN apt-get update.就解决了这个问题。

当我wget的时候,说没有这个指令,那么我就得安装wget.而nodejs的地址,也是我去从nodejs的官网查找的。所以碰到问题,具体问题具体分析。

查看我们建立的镜像。

  1. micall@micall-ThinkPad:~/docker/nodejs_web_app$ sudo docker images 
  2.  
  3. REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 
  4. minimicall/node_web 0.1 730770dff17f 6 minutes ago 268.7 MB 
  5. centos centos6 70441cac1ed5 2 weeks ago 215.8 MB 
  6. ubuntu 14.04 5506de2b643b 4 weeks ago 199.3 MB 

启动我们的镜像:

  1. sudo docker run -i -t --rm \ 
  2. > -p 3000:3000 \ 
  3. > -v `pwd`:/src \ 
  4. > minimicall/node_web:0.1 

这时候我们已经进入到了这个镜像启动的容器里面了。

  1. root@d80a2ed6b4c0:/src# 

执行下列命令

  1. root@d80a2ed6b4c0:/src# npm install --quiet > /dev/null 
  2. npm WARN engine formidable@1.0.13: wanted: {"node":"<0.9.0"} (current: {"node":"0.10.33","npm":"1.4.28"}) 
  3. root@d80a2ed6b4c0:/src# npm install -g nodemon --quiet > /dev/null 
  4. root@d80a2ed6b4c0:/src# ls 
  5. Dockerfile Dockerfile~ index.js~ package.json server.js src 
  6. Dockerfile.centos index.js node_modules package.json~ server.js~ 
  7. root@d80a2ed6b4c0:/src# nodemon server.js 
  8. 22 Nov 14:37:31 - [nodemon] v1.2.1 
  9. 22 Nov 14:37:31 - [nodemon] to restart at any time, enter `rs` 
  10. 22 Nov 14:37:31 - [nodemon] watching: *.* 
  11. 22 Nov 14:37:31 - [nodemon] starting `node server.js` 
  12. Listening on port 3000 

这个时候用浏览器打开:http://localhost:3000/,会的到如下结果。

  1. "status""ok" 

原文出自:http://blog.csdn.net/minimicall/article/details/41391241

【编辑推荐】

  1. Docker领衔云容器技术
  2. 5 个发展中的 Docker 技术
  3. 来自官方映像的 6 个 Dockerfile 技巧
  4. 2015年云计算领域预测:Docker大行其道,存储价格战伤亡惨重
  5. Flynn初探:基于Docker的PaaS平台
【责任编辑:Ophira TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

PHP和MySQL Web开发(原书第3版)

本书将介绍如何创建可交互的Web站点,包括从最简单的订单表单到复杂的安全电子商务站点。而且,读者还将了解如何使用开放源代码技术来实现...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊