当前位置: 首页 > news >正文

使用Docker部署React应用与Nginx

这个教程将帮助您使用Docker部署一个带有React的Nginx容器,并通过卷(volumes)将本地代码绑定到Docker容器中。这种设置非常适合开发环境,因为它允许您在本地编辑代码,而容器中的应用会自动更新。

步骤概述

  1. 创建Nginx配置文件
  2. 创建Dockerfile
  3. 创建docker-compose.yml文件
  4. 运行容器

1. 创建Nginx配置文件

首先,让我们创建一个Nginx配置文件,用于正确地提供React应用:

server {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html index.htm;try_files $uri $uri/ /index.html;  # 支持React路由}# 如果您有API请求需要代理,可以添加如下配置# location /api {#     proxy_pass http://backend:8080;#     proxy_set_header Host $host;#     proxy_set_header X-Real-IP $remote_addr;# }error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}
}

2. 创建Dockerfile

接下来,创建一个Dockerfile来设置Nginx容器:

FROM nginx:alpine# 删除默认的nginx配置
RUN rm /etc/nginx/conf.d/default.conf# 复制我们的配置
COPY nginx.conf /etc/nginx/conf.d/# 创建存放React应用的目录
RUN mkdir -p /usr/share/nginx/htmlEXPOSE 80CMD ["nginx", "-g", "daemon off;"]

3. 创建docker-compose.yml文件

现在,创建一个docker-compose.yml文件来定义服务和卷映射:

version: '3'services:nginx-react:build:context: .dockerfile: Dockerfilecontainer_name: nginx-react-appports:- "80:80"volumes:- ./dist:/usr/share/nginx/html- ./nginx.conf:/etc/nginx/conf.d/nginx.confrestart: unless-stopped

4. 创建一个简单的React应用(如果您还没有)

如果您还没有React应用,可以使用以下命令创建一个:

npm create vite@latest . -- --template react

在这里插入图片描述
修改app的代码:


import './App.css'function App() {return (<><div>hello world</div></>)
}export default App

在这里插入图片描述

然后构建React应用:

 npm installnpm run build

在这里插入图片描述

这将在项目目录中创建一个build文件夹,其中包含可以由Nginx提供服务的静态文件。
在这里插入图片描述

5. 运行Docker容器

最后,使用以下命令启动容器:

docker-compose up -d

这将构建Docker镜像并启动容器。您的React应用将在 http://localhost 上可用。
在这里插入图片描述

开发工作流程

  1. 在本地编辑您的React代码
  2. 运行npm run build生成新的构建文件
  3. 由于卷映射,Nginx将自动提供更新后的文件,无需重启容器

注意事项

  • 确保在运行docker-compose up之前已经构建了React应用(npm run build
  • 如果您更改了Nginx配置,需要重启容器:docker-compose restart
  • 如果您需要查看容器日志:docker-compose logs -f

这个设置使您可以在本地开发React应用,同时使用Docker和Nginx来模拟生产环境。通过卷映射,您的本地代码更改会立即反映在容器中。

相关文章:

  • 【C++】map和multimap的常用接口详解
  • 易境通海外仓系统:一件代发全场景数字化解决方案
  • 【vs2022的C#窗体项目】打开运行+sql Server改为mysql数据库+发布
  • 终端安全与终端管理:有什么区别及其重要性?
  • SQL:多列匹配(Multiple-column Matching)
  • Kubernetes MCP服务器(K8s MCP):如何使用?
  • 深度学习————模型保存与部署
  • Word2Vec详解
  • IDEA+AI 深度融合:重构高效开发的未来模式
  • Unity实用技能-UI定位总结
  • 从秒开到丝滑体验!WebAssembly助力ZKmall商城重构 B2B2C 商城性能基线
  • AI大语言模型评测体系演进与未来展望
  • Python类方法解析:从字节序列重构Vector2d实例
  • 从虚拟仿真到行业实训再到具身智能--华清远见嵌入式物联网人工智能全链路教学方案
  • 物联网简介:万物互联的未来图景
  • 国标GB28181视频平台EasyGBS校园监控方案:多场景应用筑牢安全防线,提升管理效能
  • Windows中PDF TXT Excel Word PPT等Office文件在预览窗格无法预览的终级解决方法大全
  • Kafka 消息堆积与慢消费问题排查及优化实践
  • ALTER COLLATION使用场景
  • 深入解析PyTorch中MultiheadAttention的参数key_padding_mask与attn_mask
  • 国家统计局:4月社会消费品零售总额同比增长5.1%
  • 竞彩湃|英超欧冠悬念持续,纽卡斯尔诺丁汉能否拿分?
  • 80后女博士黄双燕拟提名为内蒙古盟市政府(行署)副职人选
  • 民间打拐志愿者上官正义遭人身安全威胁,杭州公安:已立案
  • 美国失去最后的AAA主权评级,继标普、惠誉后再遭穆迪降级
  • A股三大股指低收:汽车股领涨,大金融走弱,两市成交近1.1万亿元