1+ FROM node:23.0.0-slim AS ci
2+
3+ # baseado no quanto as instruções podem mudar
4+ # instruções que não mudam ou pouco mudam devem ficar no topo
5+ # ENV, ARG, RUN apt update, apt install
6+
7+ RUN apt update && apt install -y \
8+ git \
9+ curl && \
10+ rm -rf /var/lib/apt/lists/*
11+
12+ # deterministicas e não deterministicas
13+
14+ # RUN echo "hello world" > test.txt
15+
16+ # ARG BUILD_TIMESTAMP
17+ # RUN echo "$BUILD_TIMESTAMP" > /build_time.txt
18+
19+ # add vs copy
20+
21+ # ADD --checksum=sha256:278888 http://ftp.de.debian.org/debian/pool/main/c/curl/curl_7.88.1-10+deb12u12_amd64.deb /tmp/curl.deb
22+ ADD http://ftp.de.debian.org/debian/pool/main/c/curl/curl_7.88.1-10+deb12u12_amd64.deb /tmp/curl.deb
23+ # RUN script.sh
24+ # gzip, bzip2 or xz
25+ ADD curl-8.15.0.tar.gz /tmp/test
26+
27+
28+ USER node
29+
30+ RUN mkdir /home/node/app
31+
32+ WORKDIR /home/node/app
33+
34+ RUN --mount=type=bind,source=package.json,target=package.json \
35+ --mount=type=bind,source=package-lock.json,target=package-lock.json \
36+ --mount=type=cache,target=/home/node/.npm,uid=1000,gid=1000,id=npm-cache \
37+ npm ci
38+
39+ COPY --chown=node:node . .
40+
41+ CMD [ "tail" , "-f" , "/dev/null" ]
42+
43+ FROM node:23.0.0-slim AS builder
44+
45+ ENV NODE_ENV=production
46+
47+ USER node
48+
49+ RUN mkdir /home/node/app
50+
51+ WORKDIR /home/node/app
52+
53+ COPY --from=ci --chown=node:node /home/node/app .
54+ RUN npm run build
55+
56+ RUN --mount=type=cache,target=/home/node/.npm,uid=1000,gid=1000,id=npm-cache \
57+ npm ci --only=production
58+
59+ FROM node:23.0.0-slim AS production
60+
61+ ENV NODE_ENV=production
62+
63+ USER node
64+
65+ RUN mkdir /home/node/app
66+
67+ WORKDIR /home/node/app
68+
69+ COPY --chown=node:node --from=builder /home/node/app/dist ./dist
70+ COPY --chown=node:node --from=builder /home/node/app/node_modules ./node_modules
71+ COPY --chown=node:node --from=builder /home/node/app/package.json ./
72+
73+ EXPOSE 3000
74+
75+ CMD [ "node" , "dist/main.js" ]
0 commit comments