Browse Source

multistage docker build

Richard Köhl 2 years ago
parent
commit
b8d784f0e4
1 changed files with 26 additions and 4 deletions
  1. 26 4
      Dockerfile

+ 26 - 4
Dockerfile

@@ -1,18 +1,40 @@
 ARG DENO_IMAGE=denoland/deno:alpine-1.34.2
-FROM ${DENO_IMAGE}
+ARG DENO_DIR=/deno_dir
 
-EXPOSE 1993
+# Build stage
+FROM ${DENO_IMAGE} as builder
 
 WORKDIR /app
 
-USER deno
+# Set DENO_DIR to a known location
+ENV DENO_DIR=${DENO_DIR}
 
+# Cache dependencies
 COPY deno.jsonc deno.lock ./
-
 COPY src/deps.ts ./src/
 RUN deno cache ./src/deps.ts
 
+# Build application
 COPY . .
 RUN deno cache ./src/main.ts
 
+# Runtime stage
+FROM ${DENO_IMAGE}
+
+EXPOSE 1993
+
+WORKDIR /app
+
+# Set DENO_DIR to the same location as in the build stage
+ENV DENO_DIR=${DENO_DIR}
+
+# Copy from build stage
+COPY --from=builder /app .
+COPY --from=builder ${DENO_DIR} ${DENO_DIR}
+
+# Change ownership to deno user
+RUN chown -R deno:deno /app ${DENO_DIR}
+
+USER deno
+
 CMD ["run", "--allow-net", "--allow-read", "--allow-env", "./src/main.ts"]