设为首页 收藏本站
查看: 775|回复: 0

[经验分享] Docker是如何部署一个web应用的

[复制链接]

尚未签到

发表于 2018-5-30 10:32:05 | 显示全部楼层 |阅读模式
  在继《阿里云部署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" }原文出自:http://blog.csdn.net/minimicall/article/details/41391241
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-482964-1-1.html 上篇帖子: 我理解Docker的过程2 下篇帖子: docker的使用总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表