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實踐心得。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM