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

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

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

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

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

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

1).gitignore

node_modules/*  
  • 1.

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" 
  } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

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); 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

配置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 

CMD ["/bin/bash"
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

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

docker build -t minimicall/node_web:0.1 . 
  • 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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

启动我们的镜像:

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

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

root@d80a2ed6b4c0:/src# 
  • 1.

执行下列命令

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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

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


"status""ok" 

  • 1.
  • 2.
  • 3.

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

责任编辑:Ophira 来源: MiniMicall的专栏
相关推荐

2014-05-26 09:13:46

DockerPython

2024-03-28 08:36:57

2020-10-11 20:54:39

Python开发Docker

2015-01-20 13:46:31

Java EEDockerDocker部署

2022-06-28 12:35:21

DockerPython

2020-08-28 13:27:25

Docker Node应用

2020-12-04 18:44:29

KubernetesHTTPS Wordpress

2021-08-10 07:41:24

JavaDocker镜像

2022-11-01 07:23:55

Dockernetcore程序

2015-10-12 16:45:26

NodeWeb应用框架

2023-09-21 08:00:00

ChatGPT编程工具

2024-01-01 08:46:32

2015-09-01 09:53:04

Java Web开发者

2019-11-07 14:00:36

MySQL数据库SQL

2023-05-10 08:05:41

GoWeb应用

2022-08-30 19:11:12

Docker虚拟化技术

2017-12-12 15:24:32

Web Server单线程实现

2023-11-16 08:01:31

2024-01-17 08:01:28

Docker语法命令

2014-10-15 11:01:02

Web应用测试应用
点赞
收藏

51CTO技术栈公众号