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