docker部署nodejs应用

1. 在 /home 下,先赋予当前用户读写权限,chmod 777 ./nodejs/ ,然后新建/nodejs/demo1文件夹和 /nodejs/Dockerfile文件,

/nodejs/demo1文件夹 用来放项目源码

/nodejs/Dockerfile文件自动化跑脚本

2.demo1文件夹下,有server.js、package.json

// server.js
const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
   ctx.body = 'Hello docker';
});

app.listen(8081);

package.json

{
 "name": "demo1",
 "version": "1.0.0",
 "private": true,
 "scripts": {
   "start": "node server.js"
 },
 "dependencies": {
   "koa": "^2.5.0"
 }
}

3. Dockerfile

FROM node:8.9-alpine

# 作者
MAINTAINER fengnovo

# 执行命令,创建文件夹
RUN mkdir -p /home/nodejs/demoProject1

# 将demoProject1目录拷贝到镜像里
ADD ./demo1 /home/nodejs/demoProject1

# 指定工作目录
WORKDIR /home/nodejs/demoProject1

# 安装依赖及构建node应用
RUN npm install
# RUN npm build

# 配置系统变量,指定端口
ENV HOST 0.0.0.0
ENV PORT 8081

#对外暴露的端口
EXPOSE 3000

#程序启动脚本
CMD ["npm", "start"]

4.在nodejs目录下运行

docker build -t demo1 .

5. 完了,再运行

docker images

可以看到

REPOSITORY TAG IMAGE ID CREATED SIZE

demo1 latest 9ec9bfe046e8 About a minute ago 69.5MB

6.完了,再运行,下面是将8081映射到8080端口

docker run -d -p 8080:8081 demo1

可以看到

99288344034ca2093ad2e9a558e3c5d0bb25f6ec882f93ce2e4bc2e041819a83

docker ps 可以看到

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

99288344034c demo1 "npm start" 9 seconds ago Up 8 seconds 0.0.0.0:8080->8081/tcp wonderful_murdock

7.验证

curl -i localhost:8080

浏览器也可以输入xxx.xxx.xxx.xxx(ip):8080