目标: 用 Docker 镜像的方式搭建 Node Express 应用
本项目代码 node-express-docker-sample
Demo :http://yeting-front-node-express-docker-sample.daoapp.io/
首先,借助 Yeomen Express generator 生成一个 Node Express 应用
具体的操作都在上面的 Repo 中有说明,这里不做赘述。
值得注意的是:
- Express 默认暴露 3000 端口,通过环境变量 PORT 修改
- 启动命令 node bin/www
- 调试命令 gulp
首先,选择官方的 node 镜像作为项目的基础镜像。
FROM node:0.12.7-wheezy
MAINTAINER YeTing "[email protected]"
接着,优先将 ./package.json
复制到镜像中,预先加载第三方依赖。
WORKDIR /app
COPY ./package.json /app/
RUN npm install
- 每次 Dokcer 构建成功之后就会有缓存,这样的写法能提高缓存的命中率,优化 Docker 构建镜像的速度
最后,将 Express 应用程序复制到 /app,暴露 3000 端口
COPY . /app/
EXPOSE 3000
CMD node bin/www
- Docker Container 之间是通过 link 机制来做通信的,EXPOSE 3000 ,是别的容器想要访问 该容器 3000 端口的前提条件。
完整的 Dockerfile
FROM node:0.12.7-wheezy
MAINTAINER YeTing "[email protected]"
WORKDIR /app
COPY ./package.json /app/
RUN npm install
COPY . /app/
EXPOSE 3000
CMD node bin/www
有了 Dockerfile 以后,我们可以运行下面的命令构建前端镜像并命名为 my-express-app:
docker build -t my-express-app .
最后,让我们从镜像启动容器:
docker run -p 80:3000 my-express-app
这样子我们就能从 80 端口去访问我们的 Express 应用
当然, Node 是公认的不稳定,经常会出现服务器内存溢出,而奔溃退出。
我们针对这一点,可以对 Express 启动命令做优化。 引入 forever 插件,通过 forever 来启动 express 应用。
Dockerfile
FROM node:0.12.7-wheezy
MAINTAINER YeTing "[email protected]"
WORKDIR /app
RUN npm install -g forever
COPY ./package.json /app/
RUN npm install
COPY . /app/
EXPOSE 3000
CMD forever bin/www
非常好,我们现在已经得到了一个优良的 Express Docker Seed ,快来加入你的逻辑去完成你的 Express 应用吧。