在docker里安装nginx或apache服务,然后把80对外暴漏。可以参考如下内容:
本文的目标是建立一个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\"
}
收起