Docker从入门到精通系列(1)---第一个web应用

原创 2014年11月23日 09:19:15

本文为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 应用就到这里。后面我们会补充更多的细节说明。



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

QSIM的一些认识

QSIM是一个模拟手机运行的软件。它能较逼真的模拟手机的界面显示,文件系统等,消除了在target端调试的诸多不便,但QSIM里文件实现与target上还是有一定区别。先重点分析下QSIM的实现方式,...

快速理解Docker

作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ ...

十大正在快速演进的Docker项目

十大正在快速演进的Docker项目 发表于2014-11-17 17:23| 2033次阅读| 来源CSDN| 3 条评论| 作者魏伟 云计算Docker 摘要:自从大约...

Docker 从入门到精通(一)基本操作

docker 是Linux下面的容器技术,是目前最火的开源技术之一,在大数据,云计算的时代中,我们的docker也渐渐的将在虚拟化技术上面进一步发展。如果现在你还不知道docker, 那你就out了。...

写在最前面 - 每天5分钟玩转容器技术(1)

《每天5分钟玩转容器技术》这个教程的目的、内容和形式。

webpack入门(一)——webpack 介绍

如今的网站正在演化为web应用程序: 1. 越来越多的使用JavaScript。 2. 现代浏览器提供更广泛的接口。 3. 整页刷新的情况越来越少,甚至更多代码在同一个页面。(SPA)因此有很多...

Linux的任督二脉:进程调度和内存管理

比如进程的调度延时是多少?Linux能否硬实时?多核下多线程如何执行?系统的内存究竟耗到哪里去了?我写的应用程序究竟耗了多少内存?什么是内存泄漏,如何判定内存是否真的泄漏?CPU速度、内存大小和系统性...

使用Vue-Router 2实现路由功能

注意:vue-router 2只适用于Vue2.x版本,下面我们是基于vue2.0讲的如何使用vue-router 2实现路由功能。 推荐使用npm安装。 npm install vue-rout...

1212全民疯抢 2011新款女秋冬装 斗篷装羊绒羊毛呢大衣毛呢外套

促销价格 : 718.0 元 掌柜 : zzdz服饰旗舰店 信用 : 30天累计售出 : 件 宝贝与描述相符 : 4.6持平-------- 卖家的服务态度 : 4.7高于9.61% 卖...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)