【问题标题】:Using Docker for create react app without using Nodejs to serve the file使用 Docker 创建反应应用程序而不使用 Nodejs 提供文件
【发布时间】:2020-04-10 16:12:20
【问题描述】:

不使用 NodeJs 来提供静态文件,我正在尝试构建 Docker 映像以创建具有以下文件夹结构的反应应用程序

sampleapp -
          client
            src
            ...
          DockerFile

所以客户端是由create-react-app客户端构建的,应用只是消费服务并渲染它。

Dockerfile:

FROM node:10.15.1-alpine
COPY . /var/panda/client
WORKDIR /var/panda/client
RUN  npm install --no-cache && npm run build
EXPOSE 4000 
CMD ["npm", "start"]

如何在本地和生产环境中启动 Docker 容器,上面的 Docker 脚本是否适合在生产环境中运行应用程序?

【问题讨论】:

  • 您的问题有点令人困惑。你的意思是你不想在容器中使用 node.js 吗?或者您想在容器中而不是在您的机器上使用 node.js?

标签: reactjs docker


【解决方案1】:

一旦您拥有run npm run build,您将拥有一组可以提供的静态文件。任何提供静态文件的东西都可以正常工作。一种典型的设置是使用multi-stage build 首先构建应用程序,然后从 Nginx 映像中提供它:

FROM node:10.15.1-alpine AS build
COPY . /var/panda/client
WORKDIR /var/panda/client
RUN  npm install --no-cache && npm run build

FROM nginx:1.17
COPY --from=build /var/panda/client/build /usr/share/nginx/html

对于日常开发,只需在桌面系统上直接使用npm run start 等普通 CRA 工具即可。您将获得实时重新加载等功能,并且您不必弄乱 Docker 卷或权限。由于应用程序最终在浏览器中运行,它不能参与诸如 Docker 网络之类的事情;除了部署前测试之外,在 Docker 中运行它并没有任何优势。

【讨论】:

    【解决方案2】:

    如果您询问如何运行图像,您只需输入docker build -t client .,然后输入docker run client。您的 Dockerfile 不适用于 prod 环境,因为它以 root 运行。您应该在最后一行之前添加以下行。

    RUN adduser -D user
    USER user
    

    【讨论】:

      猜你喜欢
      • 2020-10-18
      • 1970-01-01
      • 2018-06-07
      • 2016-03-20
      • 2021-02-20
      • 2018-10-30
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多