网易首页 > 网易号 > 正文 申请入驻

容器化 MERN 堆栈 Web 应用程序

0
分享至

每日分享最新,最流行的软件开发知识与最新行业趋势,希望大家能够一键三连,多多支持,跪求关注,点赞,留言。
了解如何将整个 MERN Stack 应用程序 docker 化。

MERN 堆栈正变得越来越流行,并且可以成为一个强大的堆栈。因此,能够构建和部署良好的 MERN 应用程序,极大地有助于开发人员的职业前景。

什么是 MERN 堆栈?

MERN 堆栈是一个JavaScript堆栈,旨在使开发过程更加顺畅。MERN 包括四个开源组件:MongoDB、Express、React 和 Node.js。这些组件为开发人员提供了一个相关的端到端框架。

仔细观察 MERN 堆栈组件
MongoDB:一个跨平台的文档数据库

MongoDB是一个 NoSQL(非关系型)面向文档的数据库。数据使用基于 JSON(JavaScript 对象表示法)的查询语言存储在灵活的文档中。MongoDB 以灵活且易于扩展而著称。

Express:一个后端 Web 应用程序框架

Express是另一个 MERN 组件 Node.js 的 Web 应用程序框架。开发人员无需直接在 Node.js 上手动编写完整的 Web 服务器代码,而是使用 Express 来简化编写服务器代码的任务。

React:用于构建用户界面的 JavaScript 库

React最初是由 Facebook 的一名软件工程师创建的,后来开源了。React 库可用于创建以 HTML 呈现的视图。在某种程度上,它是堆栈的定义特征。

Node.JS:一个跨平台的 JavaScript 运行时环境

Node.js构建于 Chrome 的 V8 JavaScript 引擎之上。它旨在构建可扩展的网络应用程序,并且可以在浏览器之外执行 JavaScript 代码。

在了解Docker的实用性之前,让我们先了解一下容器。

什么是容器?
“容器是将代码及其所有依赖项打包在一起的标准软件单元,因此应用程序可以快速可靠地从一个计算环境运行到另一个计算环境。”

Docker容器镜像是一个轻量级的、独立的、可执行的软件包,其中包括运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。容器镜像在运行时成为容器,就 Docker 容器而言——镜像在Docker Engine上运行时成为容器。

泊坞枢纽

Docker Hub 是一个基于云的注册服务,用于存储和共享 Docker 镜像。它允许用户创建、管理和分发 Docker 镜像和容器,以及与其他工具和平台协作和集成。Docker Hub提供了一个用于共享和分发 Docker 映像和容器的中央存储库,以及一个用于与其他工具和服务协作和集成的平台。它使用户能够快速轻松地找到并拉取他们运行应用程序所需的镜像,并与他人共享他们自己的镜像。

集成入门

我们在本教程中的主要重点是了解如何将 Docker 与 MERN 堆栈应用程序集成。为了解释这一点,让我们尝试对电子商务 Web 应用程序进行 docker 化。

您可以从此 Github链接下载基本的电子商务 Web 应用程序。

概述

我们将把Node.JS、ReactMongoDBDockerize到单独的容器中。然后我们将使用Docker Compose来运行多容器应用程序。

最后,通过一个命令,我们可以从我们的配置中创建并启动所有服务。

初始化项目

将 GitHub 存储库克隆到计算机上的本地文件夹。使用VSCode 或您选择的任何文本编辑器打开文件夹。

码头文件

现在,我们需要为服务器和客户端创建一个Dockerfile 。Dockerfile本质上包含构建镜像的构建指令

让我们从为客户端(我们的 React 前端)创建 Dockerfile 开始。

  1. 在客户端文件夹中,创建一个不带任何扩展名的文件Dockerfile
  2. 在文件中写入以下代码行:

# Dockerfile for React client
# Build react client
FROM node:10.16-alpine
# Working directory be app
WORKDIR /usr/src/app
COPY package*.json ./
### Installing dependencies
RUN npm install --silent
# copy local files to app folder
COPY . .
EXPOSE 3000
CMD ["npm","start"]

我们可以简单地用这个命令构建我们的前端

docker build -t react-app .

为了验证一切正常,我们使用以下命令运行新建的容器:

docker run -p 3000:3000 react-app .

这将只运行前端。

以同样的方式,我们创建一个名为DockerfileBackendNode.JS Server的文件。

  1. Dockerfile现在,我们为服务器创建一个目录。
  2. 在文件中写入以下代码行:

# Dockerfile for Node Express Backend
FROM node:10.16-alpine
# Create App Directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install Dependencies
COPY package*.json ./
RUN npm install --silent
# Copy app source code
COPY . .
# Exports
EXPOSE 5000
CMD ["npm","start"]

我们可以简单地使用此命令构建我们的后端:

壳1个docker build -t节点应用程序。

码头工人组成
“Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,只需一个命令,您就可以从您的配置中创建并启动所有服务。”

要一起运行我们的整个应用程序,即并行运行所有容器,我们需要配置docker-compose 文件

  1. 在项目的主目录中,(在服务器/客户端之外)创建一个名为docker-compose.yml
  2. 将这些内容写入文件。

version: '3.7'
services:
server:
build:
context: ./server
dockerfile: Dockerfile
image: myapp-server
container_name: myapp-node-server
command: /usr/src/app/node_modules/.bin/nodemon server.js
volumes:
- ./server/:/usr/src/app
- /usr/src/app/node_modules
ports:
- "5000:5000"
depends_on:
- mongo
env_file: ./server/.env
environment:
- NODE_ENV=development
networks:
- app-network
mongo:
image: mongo
volumes:
- data-volume:/data/db
ports:
- "27017:27017"
networks:
- app-network
client:
build:
context: ./client
dockerfile: Dockerfile
image: myapp-client
container_name: myapp-react-client
command: npm start
volumes:
- ./client/:/usr/app
- /usr/app/node_modules
depends_on:
- server
ports:
- "3000:3000"
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
data-volume:
node_modules:
web-root:
driver: local

创建构建

要为整个应用程序创建构建,我们需要运行以下命令:

docker-compose build

启动服务

我们可以使用以下简单命令启动多容器系统:

docker-compose up

最后,我们可以打开http://localhost:3000 看到我们的 React Frontend。

后台服务器上线http://localhost:5000

MongoDB 正在运行http://localhost:27017

维护检查

我们可以使用以下命令检查正在运行的服务:

docker-compose ps

要转储所有正在运行的服务的日志,请使用以下命令:

docker-compose logs

停止容器

要停止所有服务,我们使用:

docker-compose stop

为了降低一切,完全删除容器,以及服务的数据量:

docker-compose down --volumes

最后,我们成功地对我们的电子商务 Web 应用程序进行了 docker 化。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
桥炸了,抢修队也端了,白俄断信号自保!几十万俄军成瓮中之鳖?

桥炸了,抢修队也端了,白俄断信号自保!几十万俄军成瓮中之鳖?

万物知识圈
2026-07-01 14:26:35
25条中日航线6月取消全部航班

25条中日航线6月取消全部航班

第一财经资讯
2026-07-02 13:22:33
突发!乌克兰遭大规模导弹无人机袭击

突发!乌克兰遭大规模导弹无人机袭击

史政先锋
2026-07-02 11:47:05
生阳气的3种食物,入伏前后多吃,把脾胃养好了,阳气也补足了

生阳气的3种食物,入伏前后多吃,把脾胃养好了,阳气也补足了

阿龙美食记
2026-07-01 13:22:59
A股:股民系好安全带,大主力明牌了,明天将迎来更大级别变盘?

A股:股民系好安全带,大主力明牌了,明天将迎来更大级别变盘?

云鹏叙事
2026-07-02 00:00:05
蒋介石唯独不敢动周恩来?如果动他:估计老蒋整个嫡系都得反

蒋介石唯独不敢动周恩来?如果动他:估计老蒋整个嫡系都得反

芊芊子吟
2026-07-02 12:40:06
扎卢日内当面告诉泽连斯基,将参选乌克兰总统,基辅会变天吗?

扎卢日内当面告诉泽连斯基,将参选乌克兰总统,基辅会变天吗?

第一军情
2026-07-02 17:49:30
全网群嘲“希尔顿酒店蹭吃”事件,炸出了多少脸皮厚的神人

全网群嘲“希尔顿酒店蹭吃”事件,炸出了多少脸皮厚的神人

小椰子专栏
2026-07-01 13:00:53
从抵触到玩梗模仿!女生撞脸足坛巨星哈兰德爆火,连本尊都回复了

从抵触到玩梗模仿!女生撞脸足坛巨星哈兰德爆火,连本尊都回复了

草莓解说体育
2026-07-02 17:01:59
娱乐圈婆媳关系天花板,秦海璐用行动诠释什么是担当

娱乐圈婆媳关系天花板,秦海璐用行动诠释什么是担当

专扭杨过那条好胳膊
2026-07-02 15:30:15
23岁女子想再睡一次情夫,情夫怕妻子得知奸情,2010年将女子杀死

23岁女子想再睡一次情夫,情夫怕妻子得知奸情,2010年将女子杀死

情感艺术家
2026-06-30 06:50:11
创业板指跌逾4% 近百股跌超9%

创业板指跌逾4% 近百股跌超9%

财联社
2026-07-02 10:00:02
穆里尼奥懵了!刚接皇马王牌就要跑路,3000 万年薪都留不住

穆里尼奥懵了!刚接皇马王牌就要跑路,3000 万年薪都留不住

澜归序
2026-07-02 04:18:45
保送四强?这支阿根廷从头到脚写着卫冕二字!梅西或打破卫冕魔咒

保送四强?这支阿根廷从头到脚写着卫冕二字!梅西或打破卫冕魔咒

打小我就醜
2026-07-02 08:13:22
赵薇前夫被曝曾2天赌输1.87亿,再借9360万继续赌到输光为止

赵薇前夫被曝曾2天赌输1.87亿,再借9360万继续赌到输光为止

开开森森
2026-06-30 22:33:55
印度一家五口揣9万卢比来上海,以为能买半条街,一顿火锅后傻了

印度一家五口揣9万卢比来上海,以为能买半条街,一顿火锅后傻了

LULU生活家
2026-07-01 21:39:42
我的天!骑士,16年,老詹要回家了

我的天!骑士,16年,老詹要回家了

体育新角度
2026-07-02 16:01:21
罗栋任长沙市人民政府副市长

罗栋任长沙市人民政府副市长

星沙时报
2026-07-02 17:37:31
C罗坚持多年的饮食火了?顶刊证实:遵循这一吃法,肝脂直降38.9%

C罗坚持多年的饮食火了?顶刊证实:遵循这一吃法,肝脂直降38.9%

念洲
2026-07-02 17:30:48
德布劳内:只要我和卢卡库还在,我们就不会允许比利时沉沦

德布劳内:只要我和卢卡库还在,我们就不会允许比利时沉沦

懂球帝
2026-07-02 04:20:07
2026-07-02 19:24:49
牛马科技
牛马科技
业务数码玩家.无聊的博主
6106文章数 616关注度
往期回顾 全部

科技要闻

马斯克不承认,但SpaceX就该造AI手机

头条要闻

冒死救出起火特斯拉女司机的理想车主找到了 本人发声

头条要闻

冒死救出起火特斯拉女司机的理想车主找到了 本人发声

体育要闻

韩国人,为什么恨透了洪明甫?

娱乐要闻

众星祝福祖国,曾沛慈原形毕露?

财经要闻

千亿茶市场无赢家:澜沧巨亏 八马停"蹄"

汽车要闻

小鹏MONA L03 智能化水平拉满 还有玩法多样的巧思大空间

态度原创

家居
艺术
旅游
公开课
军事航空

家居要闻

传奇筑 日常诗

艺术要闻

这个封疆大吏的字,田蕴章力挺,专家却说俗气,您觉得这书法怎么样

旅游要闻

藏在曲靖乡野的大地裂缝,洞内常年恒温,夏天进去不用开空调!

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

美军“航母杀手”首次公开 此前从未展示

无障碍浏览 进入关怀版