Node.js Web App

注:

这个例子环境是假设你已经运行了docker进程,更多详细信息请查看运行例子,如果你不喜欢sudo,你可以用户授权命令和docker组

这个例子目的是展示如何用父镜像创建自己的镜像,修改和保存一个新的镜像,我们会通过一个简单的web镜像做hello沙箱测试

这个例子的目的是想你展示如何使用Dockerfile来创建自己的docker,我们将会制作一个简单的node.js的hello word web应用运行在centos容器上。有你可以获取所有源代码在https://github.com/gasi/docker-node-hello.

创建一个Node.js 应用

首先,创建一个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"
   }
 }

现在,创建一个index.ks文件。。来设置一个web应用使用Express.js 框架:

var express = require('express');

// Constants
var PORT = 8080;

// App
var app = express();
app.get('/', function (req, res) {
   res.send('Hello World\n');
});

app.listen(PORT)
console.log('Running on http://localhost:' + PORT);

下一步,我们将看到如何使用docker运行这个app在centos容器内,第一步,你需要为你的app创建一个Docker镜像

创建Dockerfile

创建一个空的Dockerfile文件

touch Dockerfile

用你喜欢的编辑器打开Dockerfile并且添加一行来要求docker的版本来创建镜像:

# DOCKER-VERSION 0.3.4

接下来,定义父镜像用于构建自己的镜像,在这里我们使用Centps(tag:6.4)在Docker index:

FROM centos:6.4

因为我们正在创建一个node.js的应用,我们就要先安装node.js使用的npm在你的centos镜像中,node.js运行运行你的应用并且通过npm安装你的app应用程序的依赖包.正确的安装centosnpm包,我们可以使用Node.js wiki的指令:

# Enable EPEL for Node.js
RUN     rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# Install Node.js and npm
RUN     yum install -y npm

捆绑你的应用程序源代码在你的docker镜像内,你可以使用ADD指令

# Bundle app source
ADD . /src

安装你的应用程序的二进制依赖包:

# Install app dependencies
RUN cd /src; npm install

你的应用绑定8080端口,所以你需要使用EXPOSE指令来映射到docker后台进程

EXPOSE  8080

最后但并不是不重要,定义命令来运行你的应用程序,是用CMD指令来指定运行node 你的应用程序路径,即src/index.js(参见不周我们将源代码添加到容器中)

CMD ["node", "/src/index.js"]

现在你的Dockerfile像下边这样

# DOCKER-VERSION 0.3.4
FROM    centos:6.4

# Enable EPEL for Node.js
RUN     rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# Install Node.js and npm
RUN     yum install -y npm

 # Bundle app source
 ADD . /src
 # Install app dependencies
 RUN cd /src; npm install

 EXPOSE  8080
 CMD ["node", "/src/index.js"]

创建你的镜像

来到你的Dockerfile目录并运行创建命令来创建一个docker镜像,-t参数让你设置的镜像名称,所以稍后用docker images命令你会很容器找到你的镜像:

sudo docker build -t <your username>/centos-node-hello .

你的镜像现在将会列出来:

sudo docker images

> # Example
> REPOSITORY                 TAG       ID              CREATED
> centos                     6.4       539c0211cd76    8 weeks ago
> gasi/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 ID
sudo docker ps

# Print app output
sudo docker logs <container id>

> # Example
> Running on http://localhost:8080

测试

测试你的应用,获得你的应用端口在主机上映射出的端口:

sudo docker ps

> # Example
> ID            IMAGE                          COMMAND              ...   PORTS
> ecce33b30ebf  gasi/centos-node-hello:latest  node /src/index.js         49160->8080

上边的例子,docker映射8080端口到容器的49160端口

现在你可以用curl你的app应用(通过sudo apt-get install curl安装curl)

curl -i localhost:49160

> HTTP/1.1 200 OK
> X-Powered-By: Express
> Content-Type: text/html; charset=utf-8
> Content-Length: 12
> Date: Sun, 02 Jun 2013 03:53:22 GMT
> Connection: keep-alive
>
> Hello World

如果你想同学学习运行node.js在centos在docker上,你可以获取全部的源代码在https://github.com/gasi/docker-node-hello.

powered by Gitbook 该教程制作时间: 2015-02-11 09:38:24