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

使用Docker创建并运行一个create-react-app应用(超简单)

创建并运行一个使用 Create React App (CRA) 创建的应用程序的 Docker 容器涉及几个步骤。以下是一个详细的过程,包括创建一个简单的 React 应用、编写 Dockerfile、构建镜像以及运行容器。

步骤 1: 创建一个新的 React 应用

如果你还没有一个 React 应用,可以使用 Create React App 快速创建一个:

npx create-react-app my-react-app
cd my-react-app

步骤 2: 添加 Dockerfile

在你的 React 应用根目录中创建一个名为 Dockerfile 的文件,没有文件扩展名。添加以下内容到你的 Dockerfile 中:

# 使用官方 Node.js 作为构建环境
FROM node:14 AS build# 设置工作目录
WORKDIR /app# 复制 package.json 和 yarn.lock 文件
# 如果不是使用 yarn 进行包管理,去掉 yarn.lock 即可
COPY package.json yarn.lock ./# 安装项目依赖
RUN yarn install# 复制项目文件
COPY . .# 构建应用
RUN yarn build# 运行环境使用 nginx
FROM nginx:stable-alpine# 从构建阶段复制构建产物到 nginx 目录
COPY --from=build /app/build /usr/share/nginx/html# 暴露 80 端口
EXPOSE 80# 启动 nginx
CMD ["nginx", "-g", "daemon off;"]

这个 Dockerfile 使用了多阶段构建:第一阶段使用 Node.js 镜像构建 React 应用,第二阶段使用 nginx 镜像来服务构建产物。

步骤 3: 构建 Docker 镜像

在你的应用根目录下,运行以下命令来构建 Docker 镜像:

docker run -d -p 8080:80 my-react-app

这个命令会在后台运行一个新的容器实例,将容器的 80 端口映射到宿主机的 8080 端口。

步骤 5: 访问应用

现在,你可以通过浏览器访问 http://localhost:8080 来查看你的 React 应用了。

这个过程概述了如何使用 Docker 容器化一个简单的 React 应用。你可以根据需要调整 Dockerfile 中的指令,例如使用不同的基础镜像或暴露不同的端口。

如果在 Docker 容器内部安装了 Nginx,宿主机就不需要再安装 Nginx。容器技术旨在将应用及其依赖打包在一起,从而实现应用的隔离和移植性。因此,只要容器正在运行,并且你已经正确配置了容器内的 Nginx 以及容器和宿主机之间的网络(例如,通过端口映射),你就可以直接使用容器内的 Nginx,无需在宿主机上安装相同的服务。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 新手-前端生态
  • Qt中https的使用,报错TLS initialization failed和不能打开ssl.lib问题解决
  • Spring Boot(八十):Tesseract实现图片文字自动识别
  • Linux Zip 命令指南
  • [Spring] Spring Web MVC案例实战
  • SpringCloud集成kafka集群
  • MyBatis是如何分页的及原理
  • AWS CDN新增用户ip 地区 城市 响应头
  • 前端a-tree遇到的问题
  • 普通人还有必要学习 Python 之类的编程语言吗?
  • 值得关注的数据资产入表
  • C#开发:Git的安装和使用
  • Linux多线程编程-哲学家就餐问题详解与实现(C语言)
  • 【c++刷题笔记-动态规划】day41: 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II 、
  • Perl之正则表达式
  • 【mysql】环境安装、服务启动、密码设置
  • input实现文字超出省略号功能
  • JAVA之继承和多态
  • Laravel Mix运行时关于es2015报错解决方案
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • session共享问题解决方案
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 前端临床手札——文件上传
  • 使用 QuickBI 搭建酷炫可视化分析
  • 手机端车牌号码键盘的vue组件
  • 提醒我喝水chrome插件开发指南
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • # .NET Framework中使用命名管道进行进程间通信
  • # C++之functional库用法整理
  • # 数据结构
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #565. 查找之大编号
  • (1)Android开发优化---------UI优化
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2020)Java后端开发----(面试题和笔试题)
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (分布式缓存)Redis持久化
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET 快速重构概要1
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET开源项目介绍及资源推荐:数据持久层
  • .Net中ListT 泛型转成DataTable、DataSet
  • .考试倒计时43天!来提分啦!
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @PostConstruct 注解的方法用于资源的初始化
  • @SuppressWarnings注解
  • []error LNK2001: unresolved external symbol _m
  • [AI StoryDiffusion] 创造神奇故事,AI漫画大乱斗!
  • [AIGC] 使用Curl进行网络请求的常见用法