1
- # base node image
2
- FROM node:20-alpine as base
3
-
4
- # set for base and all layer that inherit from it
5
- ENV NODE_ENV production
6
-
7
- # Install all node_modules, including dev dependencies
8
- FROM base as deps
9
-
10
- WORKDIR /myapp
11
-
12
- ADD package.json package-lock.json .npmrc ./
13
- RUN npm install --production=false
14
-
15
- # Setup production node_modules
16
- FROM base as production-deps
17
-
18
- WORKDIR /myapp
19
-
20
- COPY --from=deps /myapp/node_modules /myapp/node_modules
21
- ADD package.json package-lock.json .npmrc ./
22
- RUN npm prune --production
23
-
24
- # Build the app
25
- FROM base as build
26
-
27
- WORKDIR /myapp
28
-
29
- COPY --from=deps /myapp/node_modules /myapp/node_modules
30
-
31
- ADD . .
1
+ FROM node:20-alpine AS development-dependencies-env
2
+ COPY . /app
3
+ WORKDIR /app
4
+ RUN npm ci
5
+
6
+ FROM node:20-alpine AS production-dependencies-env
7
+ COPY ./package.json package-lock.json .npmrc /app/
8
+ WORKDIR /app
9
+ RUN npm ci --omit=dev
10
+
11
+ FROM node:20-alpine AS build-env
12
+ COPY . /app/
13
+ COPY --from=development-dependencies-env /app/node_modules /app/node_modules
14
+ WORKDIR /app
32
15
RUN npm run build
33
16
34
- # Finally, build the production image with minimal footprint
35
- FROM base
17
+ FROM node:20-alpine
18
+ COPY ./package.json package-lock.json server.js /app/
19
+
36
20
37
21
ENV PORT="8080"
38
22
ENV NODE_ENV="production"
39
23
40
- WORKDIR /myapp
24
+ COPY --from=production-dependencies-env /app/node_modules /app/node_modules
25
+ COPY --from=build-env /app/build /app/build
26
+ COPY --from=build-env /app/start.sh /app/start.sh
41
27
42
- COPY --from=production-deps /myapp/node_modules /myapp/node_modules
43
- COPY --from=build /myapp/build /myapp/build
44
- COPY --from=build /myapp/package.json /myapp/package.json
45
- COPY --from=build /myapp/start.sh /myapp/start.sh
46
28
47
- CMD ["npm" , "start" ]
29
+ WORKDIR /app
30
+ CMD ["npm" , "run" , "start" ]
0 commit comments