Node.js 使用Docker build为生产创建React应用程序?
我正在使用以下docker文件使用Node.js 使用Docker build为生产创建React应用程序?,node.js,reactjs,docker,npm,Node.js,Reactjs,Docker,Npm,我正在使用以下docker文件使用docker build创建React应用程序: # build env FROM node:13.12.0-alpine as build WORKDIR /app ENV PATH /app/node_modules/.bin:$PATH COPY package.json ./ COPY package-lock.json ./ RUN npm ci RUN npm install react-scripts -g RUN npm install --sa
docker build
创建React应用程序:
# build env
FROM node:13.12.0-alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json ./
COPY package-lock.json ./
RUN npm ci
RUN npm install react-scripts -g
RUN npm install --save @fortawesome/fontawesome-free
RUN apk add nano
RUN apk add vim
COPY . ./
RUN npm run build
# production env
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
然而,我相信Dockerfile在这里并不极端重要。在我的源代码中有一个主配置文件,我想将其从docker映像中删除,以便能够轻松部署我的React应用程序。这会在Dockerfile命令运行npm RUN build时导致编译错误,因为编译器找不到另一个文件引用的文件。对于开发版本,这不是一个问题,因为npm start
没有那么敏感
我会在最终的应用程序中将配置文件添加为docker卷
,这样代码就可以毫无问题地找到它。我只是想知道如何处理这样的情况,因为它没有出现在我的道路上较早
另外,请随意评论或优化我的Dockerfile
,因为我不确定Nginx是否是网站前端应用程序的生产构建方式。如果您的应用程序当前需要配置文件,正如您所注意到的,这类似于在构建时将值“硬编码”到其中。如果您确实需要能够在运行时动态交换另一个配置文件,则需要使用例如fetch()
来加载它,而不是捆绑它(正如所要求的那样)
如果在构建时配置东西是好的,那么我还建议查看;然后可以在构建时将合适的值作为环境变量注入
除此之外,如果您正在为Dockerfile寻找评论,从一个Aarni到另一个:
- 如果在构建以安装东西的过程中需要执行
npm ci
或warn
以外的任何操作,则package.json将被破坏<代码>反应脚本
应该是开发人员依赖项,而Font Awesome应该是常规依赖项
您不需要在临时容器中使用nano
和vim
,即使这样做了,最好是apk一步添加它们
您不需要修改生成容器中的路径
使用Nginx是绝对好的
这是我的react docker文件的一个示例。如果你想优化,你可以使用这个
附言:我是从库伯内特斯那里得到的
# ############################# Stage 0, Build the app #####################
# pull official base image
FROM node:13.12.0-alpine as build-stage
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install app dependencies
COPY package*.json ./
#RUN npm install
RUN npm install
# add app
COPY . ./
#build for production
RUN npm run-script build
# #### Stage 1, push the compressed built app into nginx ####
FROM nginx:1.17
COPY --from=build-stage /app/build/ /usr/share/nginx/html
如果Docker没有参与,你会如何处理这个问题?您可能仍然希望npm运行build
,并让面向生产的服务器提供预构建的文件。这似乎与原始问题中的Dockerfile没有实质性区别,而且似乎没有解决那里提出的配置问题。tenia mis dudas pero esto me ayudo COPY--from=build stage/app/build//usr/share/nginx/html gracias
# ############################# Stage 0, Build the app #####################
# pull official base image
FROM node:13.12.0-alpine as build-stage
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install app dependencies
COPY package*.json ./
#RUN npm install
RUN npm install
# add app
COPY . ./
#build for production
RUN npm run-script build
# #### Stage 1, push the compressed built app into nginx ####
FROM nginx:1.17
COPY --from=build-stage /app/build/ /usr/share/nginx/html