zoukankan      html  css  js  c++  java
  • 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实践心得。

  • 相关阅读:
    [ Scala ]关于scala环境搭建过程中,sbt编译中maven下载失败的解决方案(改成阿里的maven仓库)
    复习笔记:一个简单的动态代理实现
    复习笔记:一个简单的反射工厂Demo
    定时器Timer如何终止运行的问题
    Python RESTful接口开发02
    python 内置模块 logging的使用
    Django项目数据处理的流程是怎样的
    Django-Redis:在Django中使用redis作为缓存
    Python RESTful 接口开发01
    teamview
  • 原文地址:https://www.cnblogs.com/ruicky/p/6595937.html
Copyright © 2011-2022 走看看