NodeJS服务打包Docker镜像与部署

2022年6月17日 275点热度 0人点赞 0条评论

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

图片

麦壳Zone

ID : maikezone

实用的工具平台;前端、serverless等技术分享

图片

30490NodeJS服务打包Docker镜像与部署

这个人很懒,什么都没留下

文章评论