为了账号安全,请及时绑定邮箱和手机立即绑定

如何用Docker打包和部署Express.js API应用程序

标签:
Node.js Docker API

如果你只是来复制并粘贴,这里就是为你的Express.js应用生成镜像的最终Dockerfile:

以下是Dockerfile内容:

FROM node:22.10.0-alpine.3.19

LABEL 维护者="jonas@sliplane.io"

WORKDIR /app  # 设置工作目录为/app

COPY package* ./  # 复制package*文件到当前目录

RUN npm install  # 安装npm依赖

COPY . .  # 复制所有文件到当前目录

EXPOSE 3000  # 开放端口3000

CMD ["node", "index.js"]  # 启动应用命令

全屏模式;退出全屏

下面是你应该使用的.dockerignore文件,如下:

    node_modules
    npm-debug.log

这些文件由npm生成。

切换到全屏模式 退出全屏

要构建并运行该镜像,请使用以下命令:

构建Docker镜像并运行容器的命令如下:

docker build -t express-app .
docker run -p 3000:3000 express-app


全屏,退出全屏

不只是来复制粘贴的吧?让我们来看看Dockerfile里发生了什么!

[![咱们干这个](https://imgapi.imooc.com/671af82409b1c43903960516.jpg)](https://imgapi.imooc.com/671af82409b1c43903960516.jpg)

## 背景介绍

在这次教程中,我假设你已经有一个Express.js项目。Express.js是一个轻量且灵活的基于Node.js的网络应用程序框架,为Web和移动应用提供了丰富的一套功能。如果你的设置不同,你可能需要相应地调整Dockerfile。

通常,你会运行 `npm install` 然后运行 `node index.js` 来本地运行。对于部署,我们会用类似的方式来运行,但是在一个 Docker 容器里。

我们来仔细看下Dockerfile细节。

## Dockerfile
# 从镜像 node:22.10.0-alpine.3.19 开始

# 设置维护者为 jonas@sliplane.io

# 设置工作目录为 /app

# 复制 package* 文件到当前目录

# 运行 npm install 安装依赖包

# 复制所有文件到当前目录

# 暴露端口 3000

# 启动时执行 node index.js


全屏查看/退出全屏

这里到底发生了什么事?

1. 基础镜像描述: 

* 采用了基于 Alpine 3.19 的 Node.js 22.10.0,提供了一个轻量级的基础镜像。

* 使用 `LABEL` 指令来为镜像添加元数据。
2. 工作目录: 

* 将 `/app` 设定为工作目录。
3. 依赖安装: 

* 将 `package.json` 和 `package-lock.json`(如有)复制到工作目录。

* 运行 `npm install` 安装依赖。
4. 应用代码: 

* 将应用代码复制到容器中。
5. 端口暴露: 

* 暴露端口 3000,该端口通常用于 Express.js 应用程序。
6. 启动命令: 

* 指定使用 `node index.js` 来启动应用程序的命令。

这种方法相对来说比我们为 Astro 采用的构建方式要简单,因为 Express.js 应用程序一般不需要单独的构建过程。

确保在 `.dockerignore` 文件中忽略 `node_modules` 文件夹和 npm 调试日志,这样可以加快构建速度并减小镜像体积。

## 部署

你可以将这个 Docker 容器部署到任何支持 Docker 的云服务商上。比如,可以在 Heroku、DigitalOcean 或者 AWS ECS 上使用。因为我是一名 [Sliplane](https://sliplane.io?utm_source=dockerize-express) 的联合创始人之一,我会教你如何在 Sliplane 上部署它。

注册之后,你可以通过选择你的GitHub仓库来创建一个新服务。然后只需保留默认设置,并点击部署按钮。

![Sliplane 服务创建](https://imgapi.imooc.com/671af82409f2f8b108000853.jpg)

部署后,你的 Express.js 应用程序就可以在 [sliplane.app](https://sliplane.app) 的一个子域名下使用了,通常就是你的服务名。

您还可以查看应用的日志记录,查看CPU和内存使用等指标,添加持久性存储,等等。每次您推送代码到仓库时,Sliplane 会自动部署您的应用。

如果你想试用[Sliplane](https://sliplane.io?utm_source=dockerize-express),前两天免费体验!试一下,告诉我你的想法 :)

[2 分钟快速部署 ExpressJS 🚀](https://sliplane.io?utm_source=dockerize-express)

## 下一步

还有其他想知道的吗?你需要帮忙把你的Express.js应用做成容器化吗?你需要帮忙把应用部署到特定平台吗?随时联系我哦!  
你可以在[X](https://x.com/乔纳斯Scholz19)上找到我,或者直接在这篇博客下面留言。

好的

Jonas
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消