• 1
  • 2
  • 3
  • 4
  • 5
阿里云应用开发 首 页  »  帮助中心  »  云服务器  »  阿里云应用开发
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"

  }