如果你只是来复制并粘贴,这里就是为你的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)
## 背景介绍
在这次教程中,我假设你已经有一个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仓库来创建一个新服务。然后只需保留默认设置,并点击部署按钮。

部署后,你的 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 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優(yōu)質文章
正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦