javascript - 如何将 docker 与 NestjS 应用程序一起使用
问题描述
我有一个包含许多应用程序的 NestJS 项目,结构如下:
my-project:
-- apps;
--- app-one
---- src
---- tsconfig.app.json
--- app-two
---- src
---- tsconfig.app.json
-- libs
-- package.json
-- etc...
我在一个项目中有两个应用程序:app-one
和app-two
,如何使用 docker 部署app-one
或app-two
. 当我有一个应用程序时,我知道如何执行此操作,我将Dockerfile
在package.json
目录中创建并构建/运行,但是如何使用嵌套应用程序执行此操作?
谢谢你的帮助
解决方案
您可以在根目录下拥有多个具有不同文件名的 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
如果您需要更多信息,请阅读 NestJS 中有关monorepo 架构的文档
推荐阅读
- javascript - ToolTip 动态调整大小
- javascript - 如何将动态设置的 HTML 的 CSS 封装在 div 中,使其不影响外部元素?
- google-cloud-speech - c# google Speech to text api 结果质量不好
- swift - Swift:解析服务器登录 facebook 无法检索邮件
- kotlin - 等效于 Java 的“公共静态最终字符串”
- c# - 基于属性的 LINQ 相交
- ios - 无法使用 Google Map SDK iOS 绘制 GMSPolyline
- java - Matlab中YARP的使用方法
- android - 将firebase添加到项目后同步失败
- mysql - 如何利用join做一个简单的报表