我是这样解决的:
apps
app1
Dockerfile
...
app2
Dockerfile
...
app3
Dockerfile
...
docker-compose.yml
每个
Dockerfile
都是相同的:
FROM node:16.15.0-alpine3.15 AS development
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM node:16.15.0-alpine3.15 AS production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production --omit=dev
COPY --from=development /usr/src/app/dist ./dist
CMD ["npm", "run", "start-app1:prod"]
最后一行应该启动应用程序,因此请根据您的项目命名进行调整。
稍后,在CI / CD管道中,您应该逐个构建每个镜像并将它们部署。要从项目的根目录运行docker构建,您只需要提供-f
参数的Dockerfile路径,例如:
docker build -f apps/app1/Dockerfile -t app1:version1 .
docker build -f apps/app2/Dockerfile -t app2:version1 .
docker build -f apps/app3/Dockerfile -t app3:version1 .
为了在本地进行测试,可以使用 docker-compose.yml 文件。
version: '3.8'
services:
app1:
image: app1:version1
ports:
- 3000:3000
app2:
...
app3:
...
通过调用docker compose up
来启动它。