arlyxiao / best-practice

1 stars 0 forks source link

快速搭建 nestjs + docker #86

Open arlyxiao opened 2 years ago

arlyxiao commented 2 years ago

介绍下如何在一个 Dockerfile 里集成多个不同的开发环境。

同时如何使用 docker-compose 启动生产环境。

参考

https://www.tomray.dev/nestjs-docker-production

###################
# BUILD FOR LOCAL DEVELOPMENT
###################
FROM node:18-alpine As development

WORKDIR /usr/src/app

COPY --chown=node:node package.json ./
COPY --chown=node:node yarn.lock ./

RUN yarn

COPY --chown=node:node . .

USER node

###################
# BUILD FOR PRODUCTION
###################
FROM node:18-alpine As build

WORKDIR /usr/src/app

COPY --chown=node:node package.json ./
COPY --chown=node:node yarn.lock ./

COPY --chown=node:node --from=development /usr/src/app/node_modules ./node_modules

COPY --chown=node:node . .

RUN yarn build

ENV NODE_ENV production

RUN yarn install --frozen-lockfile --production && yarn cache clean

USER node

###################
# PRODUCTION
###################
FROM node:18-alpine As production

COPY --chown=node:node --from=build /usr/src/app/node_modules ./node_modules
COPY --chown=node:node --from=build /usr/src/app/dist ./dist

CMD [ "node", "dist/main.js" ]

docker-compose

services:
  api:
    build:
      dockerfile: Dockerfile
      context: .
      target: build
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
      - /usr/src/app/dist

    command: yarn run start:prod
    ports:
      - 4800:4800

Start

docker-compose up -d -V --build