第23天 🐳 Dockerizing a 3-Tier MERN App & Diving into ITSM Tools
Source: Dev.to

今天是我 DevOps 之旅中的一次重大进展。我不再只是单独运行容器,而是完成了对完整的 3 层 MERN 应用(MongoDB、Express/Node、React)的 Docker 化。
🏗️ 项目概述:3‑层架构
我不想在三个不同的终端里分别执行 npm start,而是想把整个栈都容器化。
- 前端: 在容器中运行的 React
- 后端: Node.js/Express(API 层)
- 数据库: MongoDB(持久化存储)
🐙 使用 Docker Compose 进行编排
今天真正改变游戏规则的是 Docker Compose。编写 docker‑compose.yml 让我能够在一个文件中定义所有三个容器的生命周期。
- 为客户端、服务器和数据库定义了服务。
- 设置了网络,使它们能够相互通信(使用服务名作为主机名)。
- 配置了卷以实现数据持久化。
现在启动整个环境只需运行:
docker-compose up --build
🐛 “Gotcha” 时刻
没有错误的编码日子是不存在的。一切在本地环境运行完美,但一启动容器就因二进制兼容性错误而崩溃。
问题出在 COPY . . 命令把我本地基于 Windows 的 node_modules 复制进了 Linux 容器。由于 esbuild 等二进制文件是与操作系统绑定的,Linux 容器无法运行 Windows 的二进制文件。
我是如何解决的
- 创建
.dockerignore文件,显式排除node_modules和.git。 - 删除损坏的镜像。
- 使用
--no-cache标志重新构建镜像,以确保全新安装。
更新配置后,容器之间的通信恢复正常。
🏢 代码之外:ITSM 工具
在等待构建的间隙,我回过头来学习 DevOps 的“流程”层面。我了解了:
- Jira 与 Confluence: 任务跟踪和文档管理。
- ServiceNow: 事件管理(处理故障)和变更管理(安全部署更新)。
了解这些工具如何嵌入 CI/CD 流水线,对在企业环境中工作至关重要。
🚀 接下来是什么?
我已经掌握了 Docker Compose。自然的下一步是什么?大规模编排。明天我将开始深入 Kubernetes(K8s)。迫不及待想看看 pod 和 service 与今天的实现有何不同。
LinkedIn: