|
| 1 | +ARG HOME=/app UID=9500 GID=9500 VERSION="base" |
| 2 | +ARG NODE_ENV=production |
| 3 | + |
| 4 | +# Define the base image, here we are root. |
1 | 5 | FROM node:18 as base |
2 | 6 |
|
3 | | -WORKDIR /app |
| 7 | +RUN touch /is-docker |
| 8 | + |
| 9 | +# Define the user and working directory, everything from this is user land |
| 10 | +FROM base as user |
| 11 | + |
| 12 | +ARG HOME UID GID |
| 13 | + |
| 14 | +RUN <<EOF |
| 15 | +groupadd -g ${GID} user |
| 16 | +useradd -u ${UID} -g ${GID} -s /sbin/nologin -d ${HOME} user |
| 17 | +EOF |
| 18 | + |
| 19 | +USER user |
| 20 | +WORKDIR ${HOME} |
| 21 | + |
| 22 | +FROM user as build |
4 | 23 |
|
5 | | -RUN --mount=type=bind,src=package.json,dst=/app/package.json \ |
6 | | - npm install |
| 24 | +ARG HOME |
| 25 | +# Always development for building as we need to build the code |
| 26 | +ENV NODE_ENV=development |
7 | 27 |
|
8 | 28 | RUN \ |
9 | | - --mount=type=bind,src=package.json,dst=/app/package.json \ |
10 | | - --mount=type=bind,src=src,dst=/app/src/ \ |
11 | | - --mount=type=bind,src=tsconfig.json,dst=/app/tsconfig.json \ |
12 | | - npm run build |
| 29 | + --mount=type=bind,source=src,target=${HOME}/src \ |
| 30 | + --mount=type=bind,source=package.json,target=${HOME}/package.json \ |
| 31 | + --mount=type=bind,source=package-lock.json,target=${HOME}/package-lock.json \ |
| 32 | + --mount=type=bind,source=tsconfig.json,target=${HOME}/tsconfig.json \ |
| 33 | + <<EOF |
| 34 | +npm install --loglevel=verbose --no-save |
| 35 | +npm run build |
| 36 | +EOF |
13 | 37 |
|
14 | | -FROM base as final |
| 38 | +FROM user as final |
15 | 39 |
|
16 | | -ARG VERSION="base" |
| 40 | +ARG HOME VERSION NODE_ENV |
17 | 41 |
|
18 | | -ENV VERSION=${VERSION} |
| 42 | +ENV VERSION=${VERSION} NODE_ENV=${NODE_ENV} |
19 | 43 |
|
20 | | -COPY --from=base /app/dist /app/dist |
21 | | -COPY package.json /app/package.json |
| 44 | +COPY --from=build ${HOME}/dist ${HOME}/dist |
| 45 | +COPY package.json package-lock.json ${HOME}/ |
22 | 46 |
|
23 | | -RUN npm i --omit=dev --no-save |
| 47 | +RUN npm install --loglevel=verbose --no-save |
24 | 48 |
|
25 | 49 | EXPOSE 3000 |
26 | 50 |
|
0 commit comments