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

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

时间: 2024-10-28 20:26:56

Docker从入门到精通系列(1)---第一个web应用的相关文章

MySoft.Data从入门到精通系列(五)【数据更新】

前一章讲了如何利用MySoft.Data进行数据的插入,利用DbSession可以实现各种数据增.删.改.查等各种复杂的处理,本章着重讲解一下数据的更新: 数据更新在日常开发中占据中非常重要的地位,尽次于查询.下面就讲解一下如何利用DbSession来进行数据的更新. 继续引用前面的DbSession配置,如下: /// <summary> /// 数据库访问类 /// </summary> public static class DataAccess { /// <summ

MSDN Webcast:ASP.NET MVC2程序开发入门到精通系列课程

课程讲师:苏鹏 MSDN特邀讲师北京工业大学软件工程硕士,微软最有价值专家(ASP.NET MVP),微软MSDN特约讲师.曾于微软亚洲工程院MSN组工作,现任中国网通四分公司技术支持与项目部开发经理.具有多年电信系统与OA系统实施经验. 课程下载: ASP.NET MVC2程序开发入门到精通系列课程(1):MVC架构概述 ASP.NET MVC2程序开发入门到精通系列课程(2):MVC范例分享 ASP.NET MVC2程序开发入门到精通系列课程(3):MVC中的View实现技巧(上) ASP.

一起谈.NET技术,MSDN Webcast:ASP.NET MVC2程序开发入门到精通系列课程

课程讲师:苏鹏 MSDN特邀讲师北京工业大学软件工程硕士,微软最有价值专家(ASP.NET MVP),微软MSDN特约讲师.曾于微软亚洲工程院MSN组工作,现任中国网通四分公司技术支持与项目部开发经理.具有多年电信系统与OA系统实施经验. 课程下载: ASP.NET MVC2程序开发入门到精通系列课程(1):MVC架构概述 ASP.NET MVC2程序开发入门到精通系列课程(2):MVC范例分享 ASP.NET MVC2程序开发入门到精通系列课程(3):MVC中的View实现技巧(上) ASP.

ZED-Board从入门到精通系列例程——全局定时器

本文系ZED-Board从入门到精通(三):从传统ARM开发到PS开发的转变之后增加的PS例程.由于原文较长,在原帖后面添加例程会使阅读不便,于是单独开一帖.   实际项目中几乎离不开时间的测量.定时器是硬件系统运行状态的忠实记录者,它不受CPU直接干预,自己独立运行,可以完成计时.定时.中断.实时时钟等功能.   ARM Cortex-A9内部有一个64bit全局定时器,特性包括: 64bit,增计数: 内存映射至私有内存空间: 只有复位后,在安全模式下才能访问: 可被所有Cortex-A9核

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

 一,为什么要用 Docker? Docker 是一个能够把开发应用程序自动部署到容器的开源引擎.它由Docker公司的团队编写,基于Apache 2.0开源协议授权.它提供了一个简单.轻量的建模方式,使开发生命周期更高效快速,鼓励了面向服务的架构设计.Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案. Docker 的基础是 Linux 容器(LXC)等技术.在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便.用户操作 Docke

Asp组件高级入门与精通系列之一

高级   很久没有写这个系列了,最近一直在忙其他的东西 高级的组件话题我们将讨论一些比较难实现的,复杂的东西 前段时间我写了一个龙卷风缩略图水印组件,感觉效果还不错,由于是vb写的,有一些难度,大家一起来看看 这里有帖子:http://community.csdn.net/Expert/topic/4115/4115767.xml?temp=.9513056 功能如下: 龙卷风缩略图水印组件1.0版功能特点:1.支持从bmp位图,jpeg,gif导入2.仅支持生成jpeg格式3.文字水印,支持自

ZED Board从入门到精通系列(七)——Vivado+SDK实现MP3播放

本文将给出通过Vivado IDE开发Zynq平台上PS裸机应用程序的流程.通过与本系列博客(三)对比,读者将看到Vivado开发更高效.快捷.   MP3我们都听过,现在我们可以用ZED-Board来听.板子上有音频芯片ADAU1761,可以实现录音.放音,但不具有MP3解码功能.Zynq 双核ARM9做MP3软件解码应该是可以实现的,但是博主本人有一颗VS1003,可以实现MP3硬件解码,软件将得以简化,对MP3解码原理感兴趣的可以深入研究如何利用CortexA9+ADAU1761实现MP3

ZED-Board从入门到精通系列——插曲

去年暑假期间写了一部分ZedBoard教程,由于开学,忙着找工作,一直搁置.寒假期间准备再跟进一部分系列教程.另外有几点需要说明的是,Zynq发展很快,一年之内工具可能会发生较大变化,所以不能指望我的博客内容总是与最新的工具同步,需要开发者自己协调权衡,是采用最新的工具,还是跟着博客内容进行学习.   后面的教程主要转向Vivado开发环境,因为这是未来趋势.如果还抱着ISE.EDK不放,很可能会被淘汰.Vivado包括集成开发环境(IDE)和高层次综合工具(HLS)两部分,将取代PlanAhe

Asp组件中级入门与精通系列之七

开始数据库操作. 常见的组件封装 1.? 把数据库的连接信息封装起来. 1>???? 直接返回数据库连接串,如,组件中 Public? Function? datasource()? As? Variant datasource? =? "driver={sql? server};server=yang;uid=sa;pwd=;? database=northwind" End? Function ? asp调用 set obj=server.CreateObject("