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等技术分享
文章评论