Files
Todo-App-Projet/Dockerfile
2025-06-10 05:20:19 +02:00

40 lines
1.1 KiB
Docker

FROM node:20 AS base
WORKDIR /usr/local/app
# CLIENT STAGES
FROM base AS client-base
COPY client/package.json client/yarn.lock ./
RUN --mount=type=cache,id=yarn,target=/usr/local/share/.cache/yarn \
yarn install
COPY client/.eslintrc.cjs client/index.html client/vite.config.js ./
COPY client/public ./public
COPY client/src ./src
FROM client-base AS client-dev
CMD ["yarn", "dev"]
FROM client-base AS client-build
RUN yarn build
# BACKEND STAGES
FROM base AS backend-dev
COPY backend/package.json backend/yarn.lock ./
RUN --mount=type=cache,id=yarn,target=/usr/local/share/.cache/yarn \
yarn install --frozen-lockfile
COPY backend/spec ./spec
COPY backend/src ./src
CMD ["yarn", "dev"]
FROM backend-dev AS test
RUN yarn test
# FINAL STAGE
FROM base AS final
ENV NODE_ENV=production
COPY --from=test /usr/local/app/package.json /usr/local/app/yarn.lock ./
RUN --mount=type=cache,id=yarn,target=/usr/local/share/.cache/yarn \
yarn install --production --frozen-lockfile
COPY backend/src ./src
COPY --from=client-build /usr/local/app/dist ./src/static
EXPOSE 3000
CMD ["node", "src/index.js"]