+12
-4
Dockerfile
+12
-4
Dockerfile
···
5
5
WORKDIR /deno-dir/
6
6
RUN chown -R deno:deno /deno-dir
7
7
8
-
COPY . .
9
-
RUN deno cache main.ts
10
-
RUN deno task build
8
+
# We don't copy files here anymore - they will be copied at runtime
9
+
# from the read-only mounted volume
10
+
11
+
# Cache dependencies
12
+
RUN mkdir -p /src
13
+
COPY deno.json /src/
14
+
WORKDIR /src
15
+
RUN deno cache -r deno.json
16
+
17
+
# Switch back to deno-dir (our actual runtime directory)
18
+
WORKDIR /deno-dir/
11
19
12
20
EXPOSE 8000
13
21
14
-
CMD ["run", "-A", "main.ts"]
22
+
# Command is now handled by docker-compose entrypoint
+14
-2
docker-compose.yml
+14
-2
docker-compose.yml
···
2
2
services:
3
3
deno-app:
4
4
build: .
5
+
# Copy files from . to deno-code volume on start
6
+
entrypoint: >
7
+
sh -c "
8
+
cp -r /src/* /deno-dir/ &&
9
+
deno run -A main.ts
10
+
"
11
+
# Mount source code as read-only at different path for copying
5
12
volumes:
6
-
- .:/deno-dir
13
+
- .:/src:ro
14
+
- deno-code:/deno-dir
7
15
ports:
8
16
- "8001:8000"
9
17
environment:
10
18
- DENO_ENV=production
11
-
command: ["deno", "run", "-A", "main.ts"]
19
+
20
+
volumes:
21
+
deno-code:
22
+
# This ensures the volume is recreated each time
23
+
name: "deno-code-${COMPOSE_PROJECT_NAME:-default}"