docker化Node.js
本示例的目标是告诉你怎样构建你自己的Docker镜像使用Dockerfile。为此我们将创建一个简单的Node.js hello world web应用运行在CentOS上。你可以获得全部源代码https://github.com/enokd/docker-node-hello/。
创建Node.js应用
首先,创建一个目录src,然后创建一个pachage.json文件(描述你的app和app依赖项):
{"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"}}
其次,创建一个index.js文件,定义web app使用Express.js框架。
var express =require('express');// ConstantsvarPORT =8080;// Appvar app = express();app.get('/',function(req, res){res.send('Hello world\n');});app.listen(PORT);console.log('Running on http://localhost:'+ PORT);
接下来,我们将展示使用Docker在CentOS容器里运行这个app。首先,你将需要构建一个docker镜像。
创建Dockerfile
创建一个空的文件Dockerfile。
touch Dockerfile
打开Dockerfile。
定义父镜像(你想使用来构建app 镜像基于的镜像)。这里,我们将使用在Docker Hub上的CentOS(tag:centos6):
FROM centos:centos6
刚我们创建一个Node.js应用,所以你得先安装Node.js(npm)在你的CentOS镜像里。Node.js要求运行你的app,npm 安装你定义在package.json的应用依赖项。为了安装正确的package,我们将使用来自Node.js wiki的解释。
# Enable EPEL for Node.jsRUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm# Install Node.js and npmRUN yum install -y npm
为了bundle你的app源代码到docker镜像中,使用COPY 命令。
# Bundle app sourceCOPY ./src
安装你的app依赖项使用npm二进制。
# Install app dependenciesRUN cd /src; npm install
你的app绑定到端口8080,因此你将使用EXPOSE指令:
EXPOSE 8080
最后,定义运行你app的命令,使用CMD
CMD ["node","/src/index.js"]
构建你的镜像
进入目录,有你的dockerfile和运行如下命令构建docker镜像。-t标志允许你的镜像添加tag,因此,使用的docker images命令,容易发现later。
sudo docker build -t <your username>/centos-node-hello .
你的镜像,现在能被docker列举出来了。
sudo docker images# ExampleREPOSITORY TAG ID CREATEDcentos centos6 539c0211cd768 weeks ago<your username>/centos-node-hello latest d64d3505b0d2 2 hours ago
运行镜像
-d,以隔离模式运行你的镜像,让容器运行在后台。-p标志指定公有端口到容器私有端口。运行你事先构建好的镜像。
sudo docker run -p 49160:8080-d <your username>/centos-node-hello
打印你app的输出:
# Get container IDsudo docker ps# Print app outputsudo docker logs <container id># ExampleRunning on http://localhost:8080
测试
为了测试你的app,得到你应用(Docker映射的)端口。
sudo docker ps# ExampleID IMAGE COMMAND ... PORTSecce33b30ebf <your username>/centos-node-hello:latest node /src/index.js 49160->8080
在以上的示例中,docker映射容器的8080端口到49160端口。
现在你可以访问app使用curl。
curl -i localhost:49160HTTP/1.1200 OKX-Powered-By:ExpressContent-Type: text/html; charset=utf-8Content-Length:12Date:Sun,02Jun201303:53:22 GMTConnection: keep-aliveHello world
如果你使用Boot2docker 在OS X上,端口实际映射到Docker host VM上,你需要使用如下命令:
curl $(boot2docker ip):49160
我们希望这个教程对你有帮助,安装和运行Node.js在CentOS上使用Docker。你可以得到所有源代码 https://github.com/enokd/docker-node-hello/
