【问题标题】:When to build Typescript Node.js app with docker何时使用 docker 构建 Typescript Node.js 应用程序
【发布时间】:2020-06-10 02:31:09
【问题描述】:

我目前正在开发一个完整的 typescript 应用程序:Express 用于服务器,React 用于客户端。文件夹结构如下所示:

.
├──client/ <-- React app
├──server/ <-- Express server
├──dist/ <-- build result goes into this folder
├──package.json <-- top-level files

显然,我的应用程序需要一个扩展的构建阶段来创建dist 文件夹。首先转译服务器,然后构建 React 应用程序,将 React 应用程序的构建结果复制粘贴到 dist 文件夹中,以使 Express 将它们作为静态文件提供。

我的问题是,如果我想使用 Docker 部署这个应用程序,我应该什么时候进行这个构建阶段。

首先,我可以在我的环境中构建应用程序,然后制作一个仅包含依赖项和 dist 文件夹的 docker 映像。但感觉我并没有真正将我的应用容器化。

或者我可以将clientserver 文件夹复制到我的docker 镜像中,然后在镜像中构建应用程序。但是通过这种方式,我必须在图像中安装所有的开发依赖项(如@babel/...@types/... 模块),感觉也不对。

所以我想问一下,以上两种方法中哪一种更适合使用 Docker 构建和部署我的应用程序。如果您认为两者都是错误的并且可以提出任何新的更好的策略,那也很好。

提前致谢!

【问题讨论】:

    标签: node.js reactjs typescript docker express


    【解决方案1】:

    如果可能的话,你将两个应用程序分开来反应和表达,但是如果它是整个单体应用程序,你可以在 docker 中添加这两个文件夹。

    在 docker 中,您可以创建多个 stag docker 映像。在第一阶段安装开发依赖项并生成捆绑包,而在几秒钟内只需从第一阶段复制您的捆绑包并使用它。如果dist里面没有express的作用可以直接复制server到第二阶段。

    FROM node:10-alpine AS node-build
    WORKDIR /my-app/app/static
    COPY app/static/package.json ./
    RUN npm install && npm install -g --unsafe-perm node-sass 
    COPY app/static .
    RUN npm run build
    
    FROM python:3.5-slim
    WORKDIR /my-app-final
    COPY requirements.txt ./
    RUN apt-get update -yq \
        && apt-get install -y python3-dev build-essential -yq \
        && apt-get install curl -yq \
        && pip install -r requirements.txt \
        && apt-get purge -y --auto-remove gcc python3-dev build-essential
    COPY --from=node-build ./my-app ./
    COPY ./server .
    CMD python3 run.py
    

    以上是多阶段构建的小例子,希望对您有所帮助。

    【讨论】:

    • 猜猜是时候彻底分离前端了。 (我一直都知道应该把它彻底分开,但又不敢开始进步)。并为快速服务器构建搜索多阶段 docker。感谢您的建议!
    • 很高兴听到这个消息,如果您遇到任何问题,请随时告诉我。
    猜你喜欢
    • 2013-06-06
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 2021-11-21
    • 2017-06-09
    • 1970-01-01
    • 2015-04-26
    相关资源
    最近更新 更多