aboutsummaryrefslogtreecommitdiff
path: root/Dockerfile
diff options
context:
space:
mode:
authorRitesh Ghosh <[email protected]>2023-08-20 13:36:54 +0530
committerRitesh Ghosh <[email protected]>2023-08-20 13:36:54 +0530
commit704c8a3e518f8251f4c343fe6079d57b982c2c8b (patch)
tree96e4851c25c65c20d62cac5284543fd4d471e1aa /Dockerfile
parent198ae58dbc79ef572143520e82ca665e7fece5b2 (diff)
downloadaniwatch-api-704c8a3e518f8251f4c343fe6079d57b982c2c8b.tar.xz
aniwatch-api-704c8a3e518f8251f4c343fe6079d57b982c2c8b.zip
feat(docker): added docker multi stage build
Diffstat (limited to 'Dockerfile')
-rw-r--r--Dockerfile31
1 files changed, 26 insertions, 5 deletions
diff --git a/Dockerfile b/Dockerfile
index e99d431..a93eb84 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,13 +1,29 @@
-FROM node:18-alpine
+# build stage for building .ts files
+FROM node:18-alpine as build
+
+RUN mkdir /home/app
+
+WORKDIR /home/app
+
+COPY package.json .
+
+RUN npm install --ignore-scripts
+
+COPY . .
+
+RUN npm run build
+
+# prod stage for including only necessary files
+FROM node:18-alpine as prod
-LABEL description="Aniwatch API docker image"
LABEL org.opencontainers.image.source https://github.com/ghoshRitesh12/aniwatch-api
+LABEL org.opencontainers.image.description "Aniwatch API docker image"
# create a non-privileged user
RUN addgroup -S aniwatch && adduser -S zoro -G aniwatch
# set secure folder permissions
-RUN mkdir /app && chown -R zoro:aniwatch /app
+RUN mkdir -p /app/public /app/dist && chown -R zoro:aniwatch /app
# set non-privileged user
USER zoro
@@ -21,8 +37,11 @@ COPY --chown=zoro:aniwatch package.json .
# install dependencies
RUN npm install --omit=dev --ignore-scripts
-# copy all necessary files in the container (except ones in .dockerignore)
-COPY --chown=zoro:aniwatch . .
+# copy public folder from build stage to prod
+COPY --from=build --chown=zoro:aniwatch /home/app/public /app/public
+
+# copy dist folder from build stage to prod
+COPY --from=build --chown=zoro:aniwatch /home/app/dist /app/dist
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s CMD [ "npm", "run", "healthcheck" ]
@@ -33,3 +52,5 @@ ENV PORT=4000
EXPOSE 4000
CMD [ "node", "dist/server.js" ]
+
+# exit \ No newline at end of file