前言

由于自己的接口项目都是用node写的,node的尿性都知道,一点报错项目就自动停止了,所以为了解决这个问题,就用docker来部署这个项目,在报错的时候就自动启动,别问为什么不解决报错,但凡能解决我就解决了。

正文

首先在express项目的根目录创建一个Dockerfile文件

文件内容:

# 基础镜像 Node 版本为16
FROM node:16.14.2 as base
# 设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在则会创建,也可以设置多次。
# 在一台机器中,用这个镜像创建一个容器时,相对于这台机器的根目录下面的src文件夹
WORKDIR /src
# 需要package.json 告诉程序运行需要安装的依赖。所以拷贝了package.json和package-lock.json到工作目录
COPY package*.json ./
# EXPOSE用来指定端口,使容器内的应用可以通过端口和外界交互
# 但是EXPOSE并不会使容器访问主机的端口
# 如果想使得容器与主机的端口有映射关系,必须在容器启动的时候加上 -P参数 
# 语法:EXPOSE <port>/<tcp/udp>
EXPOSE 6000
# 这一步和第一步很像,从base镜像创建一个开发环境的镜像
FROM base as dev
# ENV命令用于设置环境变量。这些变量以”key=value”的形式存在,并可以在容器内被脚本或者程序调用。
# 设置development 环境
ENV NODE_ENV=development
# RUN指令在构建时将会生成一个新的镜像层,并且执行RUN指令后面的内容
RUN npm install
# COPY 命令 指从外部往容器内添加文件。但是COPY指令只支持基本的文件和文件夹拷贝功能
COPY . .
# 和RUN命令相似,CMD可以用于执行特定的命令。
# 和RUN不同的是,这些命令不是在镜像构建的过程中执行的,而是在用镜像构建容器后被调用
CMD ["npm", "run", "start"]

然后使用 docker build -t api .构建镜像,其中api为镜像名

使用命令docker images就可以看到构建的镜像

最后就是运行容器

命令:docker run -d --name apiServe -p 3000:6000 api

其中 --name apiServe apiServe 为容器的名称

-p 3000:6000:将容器的6000端口映射到宿主机的3000端口

api:镜像的名称

为了让其在报错之后自动重启,可以加上 --restart=always参数

例如:docker run -d --restart=always --name apiServe -p 3000:6000 api

最后修改:2023 年 06 月 08 日
如果觉得我的文章对你有用,请随意赞赏