Docker部署node服务
一、node服务配置
1、修改 package.json , 并写入相关信息和依赖
vim package.json
{ "name": "dockerTest", "version": "1.0.0", "description": "Node.js on Docker", "author": "Docker", "main": "app.js", "scripts": { "start": "node app.js" }, "dependencies": { "express": "^4.13.3" } }
2、修改 app.js
vi app.js
var express = require('express'); var PORT = 8000; # 保持与服务启动端口一致 var app = express(); app.get('/', function (req, res) { res.send('Helloworld\n'); }); app.listen(PORT); console.log('Running on http://localhost:' + PORT);
二、编辑Dockerfile
FROM node:12 RUN mkdir -p /home/vue_shop # 在容器中创建目录 WORKDIR /home/vue_shop # 将容器工作目录定位至 /home/vue_shop COPY . /home/vue_shop # 将当前目录下的文件复制到容器中的指定目录 RUN npm install # 执行npm环境安装 EXPOSE 8000 ## 将容器内的端口导出给主机,便于访问,保持与服务启动端口及app.js中的端口一致 CMD npm start
## 如果想运行多条指令可以这样:
## CMD git pull && npm install && npm start
三、构建 Images
docker build -t vue_shop_node .
四、使用镜像创建容器并启动
docker run --name=vue_shop --restart=always -p 0.0.0.0:8000:8000 -d vue_shop_node
此时,我们就可以通过浏览器访问我们的node服务了
五、在Docker中用 pm2 或 forever 部署 nodejs项目
1、 pm2
使用命令 pm2 start app.js 之后, pm2 默认在后台运行, 如果使用了Docker后,容器运行并立即退出,需要手动给“pm2”指定参数 --no-daemon
在Dockerfile中:
--no-daemon // run pm2 daemon in the foreground if it doesn't exist already CMD pm2 start app.js --no-daemon // 设置启动方式 # 或者 使用 pm2-docker CMD pm2-docker start app.js
2、 forever
同理forever也是
Forever start script.js runs in the background. To run forever in the foreground, try forever script.js.
CMD forever -c 'node --harmony' app.js // 设置启动方式