Docker 跟 NodeJs 最佳实践
Level-1 简单实现
需求:简单的构建一个app应用并且用docker部署。
Dockerfile编写为:
FROM node:7.3.0 RUN mkdir -p /usr/src/app COPY package.json /usr/src/app/ RUN npm install COPY . /usr/src/app EXPOSE 3000 CMD npm start
Leve1-2 增加pm2
需求:虽然我上了Docker了吧,但是没有进程守护心里怕怕的。
PS:除了使用pm2外,另外还有一说是在启动docker时候添加restart=always
也可以实现自动重启。
在在PS:pm2也有 docker了,即pm2-docke
FROM node:7.3.0 RUN mkdir -p /usr/src/app COPY package.json /usr/src/app/ RUN npm install COPY . /usr/src/app EXPOSE 3000 CMD ["pm2","start", "pm2.json","--no-daemon"]
Leve-3 使用shell脚本,执行多任务带参数的启动
需求:在启动的时候要执行多个带变量的命令、
这样的话CMD就满足不了了,只能上shell脚本来完成docker_start.sh
为:
#!/bin/sh NODE_ENV=$1 if [ -z $NODE_ENV ] then echo "please input NODE_ENV" exit 1 fi echo $NODE_ENV pm2 start pm2.json --env $NODE_ENV --no-daemon
Dockerfile
:
FROM node:boron # Install global pm2 RUN npm install pm2 -g --registry=https://registry.npm.taobao.org # Create app directory RUN mkdir -p /usr/src/app WORKDIR /usr/src/app # Install app dependencies COPY package.json /usr/src/app/ RUN npm install --registry=https://registry.npm.taobao.org # Bundle app source COPY . /usr/src/app ENV NODE_ENV dev RUN ["chmod", "+x", "/usr/src/app/docker_start.sh"] CMD /bin/bash /usr/src/app/docker_start.sh $NODE_ENV EXPOSE 3000 # Build image # docker build -t pm2_test:v1 . # Run docker # docker run -e NODE_ENV=staging --name pm2_test -p 3500:3500 -d pm2_test:v1
重点说明: 其中的变量是NODE_ENV
,所以在run的时候环境变量会替换到Dockerfile
中的ENV
,这就是精华所在。
以上,就是最近docker实践心得。
作者:ruicky
出处:http://www.cnblogs.com/ruicky/
欢迎任何形式的转载,未经作者同意,请保留此段声明!