如何 Docker 化和部署 Express.js API
如果您只是来复制和粘贴,下面是最终的 Dockerfile,它将为您的 Express.js 应用程序生成图像:
FROM node:22.10.0-alpine.3.19
LABEL maintainer="jonas@sliplane.io"
WORKDIR /app
COPY package* ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
这是您应该使用的 .dockerignore 文件:
node_modules
npm-debug.log
要构建并运行图像,请使用以下命令:
docker build -t express-app .
docker run -p 3000:3000 express-app
不想直接复制粘贴?我们来看看 Dockerfile 里都做了些什么!
设置
在本教程中,我假设您已经设置了一个 Express.js 项目。Express.js 是一个精简且灵活的 Node.js Web 应用程序框架,它为 Web 和移动应用程序提供了一组强大的功能。如果您有不同的设置,则可能需要相应地调整 Dockerfile。
通常情况下,你会在本地运行npm install
并node index.js
开始工作。对于部署,我们将使用类似的方法,但需要在 Docker 容器内进行。
让我们深入了解 Dockerfile 的细节。
Dockerfile
FROM node:22.10.0-alpine.3.19
LABEL maintainer="jonas@sliplane.io"
WORKDIR /app
COPY package* ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
那么这里发生了什么?
- 基础图像:
- 在 Alpine 3.19 上使用 Node.js 22.10.0,提供轻量级的基础镜像。
- 该
LABEL
指令将元数据添加到图像中。
- 工作目录:
- 设置
/app
为后续指令的工作目录。
- 设置
- 依赖项安装:
- 将
package.json
和package-lock.json
(如果存在)复制到工作目录。 - 运行
npm install
以安装依赖项。
- 将
- 申请代码:
- 将其余应用程序代码复制到容器中。
- 端口暴露:
- 公开端口 3000,通常由 Express.js 应用程序使用。
- 启动命令:
- 指定使用来运行应用程序的命令
node index.js
。
- 指定使用来运行应用程序的命令
这种方法比我们用于 Astro 的多阶段构建更简单,因为 Express.js 应用程序通常不需要单独的构建步骤。
确保添加.dockerignore
文件以忽略node_modules
文件夹和 npm 调试日志。这将加快构建过程并减小镜像大小。
部署
你可以将此 Docker 容器部署到任何支持 Docker 的云提供商。例如,你可以使用 Heroku、DigitalOcean 或 AWS ECS 等平台。因为我是Sliplane的联合创始人,所以我将向你展示如何在这些平台上部署它。
注册后,您可以通过选择您的 Github 仓库来创建新服务。然后,只需保留默认设置并单击“部署”。
部署后,您的 Express.js 应用程序将在sliplane.app的子域下可用,通常它只是您的服务名称。
您还可以查看应用日志、CPU 和内存使用情况等指标、添加持久存储等等。每当您推送到代码库时,Sliplane 都会自动部署您的应用。
如果你想尝试Sliplane,前两天免费!快来试试,然后告诉我你的想法吧 :)
后续步骤
您还有什么想了解的吗?需要帮助将 Express.js 应用 Docker 化吗?需要帮助将其部署到特定平台吗?欢迎随时联系我!您可以在X
上找到我,也可以直接在本博客上发表评论。
干杯,
乔纳斯
文章来源:https://dev.to/code42cate/how-to-dockerize-and-deploy-expressjs-apis-k5d