【问题标题】:How to use docker with NestjS apps如何将 docker 与 NestjS 应用程序一起使用
【发布时间】:2021-06-30 03:45:17
【问题描述】:

我有一个包含许多应用程序的 NestJS 项目,结构如下:

my-project:
-- apps;
--- app-one
---- src
---- tsconfig.app.json
--- app-two
---- src
---- tsconfig.app.json
-- libs
-- package.json
-- etc...

我在一个项目中有两个应用程序:app-oneapp-two,如何使用docker部署app-oneapp-two。当我有一个应用程序我知道如何执行此操作时,我将在 package.json 目录中创建 Dockerfile 并构建/运行,但是如何使用嵌套应用程序执行此操作?

感谢您的帮助

【问题讨论】:

    标签: javascript typescript docker nestjs


    【解决方案1】:

    您可以在根目录下拥有多个具有不同文件名的 Dockerfile。

    my-project:
    -- apps;
    --- app-one
    ---- src
    ---- tsconfig.app.json
    --- app-two
    ---- src
    ---- tsconfig.app.json
    -- libs
    -- package.json
    -- Dockerfile.app-one
    -- Dockerfile.app-two
    

    对于 Dockerfiles,您只需要运行您的自定义脚本来构建指定的应用程序

    Dockerfile.app-one

    FROM node:12.17-alpine as builder
    
    WORKDIR /build
    COPY package.json yarn.lock ./
    RUN yarn
    
    COPY . .
    RUN  yarn build:app-one
    
    EXPOSE 3000
    
    CMD [ "yarn", "start:app-one"]
    

    package.json

    "scripts": {
      "build:app-one": "nest build app-one",
      "build:app-two": "nest build app-two",
      "start:app-one": "nest start app-one",
      "start:app-two": "nest start app-two",
    }
    

    nest-cli.json

    {
      "projects": {
        "app-one": {
          "type": "application",
          "root": "apps/app-one",
          "entryFile": "main",
          "sourceRoot": "apps/app-one/src",
          "compilerOptions": {
            "tsConfigPath": "apps/app-one/tsconfig.app.json",
            "assets": []
          }
        },
        "app-two": {
          "type": "application",
          "root": "apps/app-two",
          "entryFile": "main",
          "sourceRoot": "apps/app-two/src",
          "compilerOptions": {
            "tsConfigPath": "apps/app-two/tsconfig.app.json",
            "assets": []
          }
        },
      }
    }
    

    然后,在 CI/CD 中的构建/部署任务中指定文件名

    .gitlab-ci.yml

    image: docker:git
    
    services:
      - docker:dind
    
    stages:
      - build
    
    build-app-one:
      stage: build
      script:
        - docker build . -f Dockerfile.app-one
    
    build-app-two:
      stage: build
      script:
        - docker build . -f Dockerfile.app-two
    

    如果您需要更多信息,请阅读有关 monorepo architecture in NestJS 的文档

    【讨论】:

      猜你喜欢
      • 2019-07-05
      • 2018-07-05
      • 1970-01-01
      • 2020-12-28
      • 2022-08-13
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多