微信号:daocloudpublic

介绍:分享Docker及容器技术相关信息,助力开发者和企业云海扬帆!本公众号由DaoCloud负责运营.

「前端开发者的 Docker 之旅」用 Docker 搭建 Node Express 应用

2015-12-02 11:27 叶挺

作者介绍


叶挺@DaoCloud|90后,现为 DaoCloud 前端工程师,主要负责前端研发、前端性能优化、前端组件化探索,Docker 技术的爱好者,爱探索,爱深究,爱分享,将我之所学分享于他人



本期内容


目标: 用 Docker 镜像的方式搭建 Node Express 应用

本项目代码:https://github.com/Ye-Ting/node-express-docker-sample

Demo :http://yeting-front-node-express-docker-sample.daoapp.io/

>>>>

Node Express 应用搭建

首先,借助 Yeomen Express generator 生成一个 Node Express 应用 。

具体的操作都在上面的 Repo 中有说明,这里不做赘述。

值得注意的是:

  • Express 默认暴露 3000 端口,通过环境变量 PORT 修改

  • 启动命令 node bin/www

  • 调试命令 gulp

>>>>

编写 Dockerfile

  • 首先,选择官方的 node 镜像作为项目的基础镜像。

  • FROM node:0.12.7-wheezy MAINTAINER YeTing "me@yeting.info"

  • 接着,优先将 ./package.json 复制到镜像中,预先加载第三方依赖。

  • WORKDIR /app COPY ./package.json /app/RUN npm install

每次 Dokcer 构建成功之后就会有缓存,这样的写法能提高缓存的命中率,优化 Docker 构建镜像的速度。

  • 最后,将 Express 应用程序复制到 /app,暴露 3000 端口。

  • COPY . /app/EXPOSE 3000CMD node bin/www

Docker Container 之间是通过 link 机制来做通信的,EXPOSE 3000 ,是别的容器想要访问 该容器 3000 端口的前提条件。

>>>>

构建 Docker Image

完整的 Dockerfile

FROM node:0.12.7-wheezy MAINTAINER YeTing "me@yeting.info"WORKDIR /app COPY ./package.json /app/RUN npm install COPY . /app/EXPOSE 3000CMD node bin/www

有了 Dockerfile 以后,我们可以运行下面的命令构建前端镜像并命名为 my-express-app:

docker build -t my-express-app .

>>>> 部署 Docker Image

最后,让我们从镜像启动容器:

docker run -p 80:3000 my-express-app

这样子我们就能从 80 端口去访问我们的 Express 应用。

>>>> Node Express 应用运行优化

当然, Node 是公认的不稳定,经常会出现服务器内存溢出,而崩溃退出。

我们针对这一点,可以对 Express 启动命令做优化。引入 forever 插件,通过 forever 来启动 express 应用。

Dockerfile

FROM node:0.12.7-wheezy

MAINTAINER YeTing "me@yeting.info"WORKDIR /app

RUN npm install -g forever

COPY ./package.json /app/RUN npm install

COPY . /app/EXPOSE 3000CMD forever bin/www 

非常好,我们现在已经得到了一个优良的 Express Docker Seed,快来加入你的逻辑去完成你的 Express 应用吧。

下期预告:用 Docker 搭建 Angular 前端应用

↓↓↓ 点击"阅读原文" 【查看源码】


 
DaoCloud公众号 更多文章 Docker之火,即将燎原:全国范围召集社区活动组织者! Docker庆生会,Party On! Docker源码分析(一):Docker架构 Docker源码分析(二):Docker Client创建与命令执行 Docker源码分析(三):Docker Daemon启动
猜您喜欢 “慧眼”识舆情——腾讯带你发现下一个现象级游戏 微软大数据切入角度:将Office作为UI 五年Skype架构师之路的感言 理解c语言system函数的返回值 支付系统开发的实践与思考(一)