打包NodeJs-Docker并快速部署

NodeJS服务通过docker部署具有上下线便捷、容易扩展(批量部署)等优点;只需一次打包镜像文件,做到快速部署,秒启动。


1. 序言

该部署文件适用于Egg、midway等框架方案项目的打包部署

2. 创建Dockerfile文件

在项目的根目录下创建Dockerfile; (这里名字自定义)

FROM node:15.0.1 AS build    # 拉取的原镜像
LABEL author=zboy # 作者,缺省
RUN mkdir /app  # 创建一个项目文件夹,可自定义
WORKDIR /app  # 切入项目文件夹下
COPY . /app  # 将本地文件复制到项目文件夹下
RUN npm set registry https://registry.npm.taobao.org  # 切换到淘宝镜像,安装依赖比较快
RUN npm install  # 安装依赖
RUN npm run build # 打包项目
FROM node:15.0.1-alpine  # 切换镜像文件, alpine镜像打包后更小
WORKDIR /app  # 切换工作目录
COPY --from=build /app/dist ./dist  # 将打包后的的文件复制到docker镜像里
COPY --from=build /app/bootstrap.js ./   # 这个是midwayjs的启动文件,egg没有,不拷贝
COPY --from=build /app/package.json ./   
RUN npm install --production  # 安装工程依赖
EXPOSE 7001 # 设置暴露端口
CMD ["npm", "run", "start"]  # 启动

3. 执行打包命令

docker build -f Dockerfile -t midwayserve:1.0  .

-f 指向Dockerfile配置文件
-t 命名数据的镜像文件名称
后面有个 (.) 表示当前目录

  • 第一次打包比较慢,需要下载镜像文件,以后就快了

4. 运行docker容器

docker run -d --name midway-serve -p  7001:7001 midwayserve:1.0

5. 查看容器状况

  • 查看容器是否启动
docker ps     (如果发现列表中没有,使用 docker ps -a)
  • 查看容器启动日志
docker logs midway-serve

6. 问题归纳

  • 日志查看服务启动成功,但容器启动后自己就关掉了?
    查看package.json中的scripts中的start配置,看是否有 --daemon ,该参数用来让服务后台运行,而docker启动后会监听前台运行服务,如果没有就会自己关闭。只要删除该参数,让服务在前台运行就好了。
# [修改前]
egg-scripts start --daemon --env=prod --title=midway-service --port=7001 --framework=@midwayjs/web

# [修改后]
egg-scripts start --env=prod --title=midway-service --port=7001 --framework=@midwayjs/web

你可能感兴趣的:(打包NodeJs-Docker并快速部署)