• 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实践心得。

  • 相关阅读:
    每次任务 创建 一个 Scheduler,运行完直接shutdown ,同时运行不相互影响.
    get 和 post 的区别
    jq ajax
    h5
    reset
    ajax
    手机端
    IE浏览器下LI的默认高度
    IE FF 支持li:hover,但是ie6不支持,a:hover ul 这种写法是要搭配顶部针对IE6声明用的
    ie7/8卸载工具 降级到IE6
  • 原文地址:https://www.cnblogs.com/ruicky/p/6595937.html
Copyright © 2020-2023  润新知