Repository navigation
Expand file tree
/
Copy pathDockerfile
More file actions
52 lines (44 loc) · 1.92 KB
/
Copy pathDockerfile
File metadata and controls
52 lines (44 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# -------------------------------------------------
# 基礎映像:最小化的 Node + Alpine
# -------------------------------------------------
FROM node:20-alpine AS runtime
# -------------------------------------------------
# 工作目錄
# -------------------------------------------------
WORKDIR /app
# -------------------------------------------------
# 只拷貝 npm 相關檔案(避免帶入不必要檔案)
# -------------------------------------------------
COPY package*.json ./
# 若有 lock 檔,會同時被 copy
# COPY npm-shrinkwrap.json ./
# -------------------------------------------------
# 若你的套件需要編譯原生模組,先安裝 build tools
# (如果全都是純 JavaScript,可直接移除)
# -------------------------------------------------
# RUN apk add --no-cache python3 make g++ pkgconfig
# -------------------------------------------------
# 安裝 **production** 相依(不含 devDependencies)
# 使用 `--only=production` 以兼容所有 npm 版本
# -------------------------------------------------
ENV NODE_ENV=production
RUN npm ci --only=production && \
npm cache clean --force
# -------------------------------------------------
# 拷貝應用程式原始碼(src/... 以及其他必要檔案)
# -------------------------------------------------
COPY src/ ./src/
# 若有其他需要的目錄(例如 public/、config/)自行加入
# COPY public/ ./public/
# -------------------------------------------------
# 加入 Docker 標記(保證 env 判斷通過)
# -------------------------------------------------
ENV DOCKER=true
# -------------------------------------------------
# 暴露服務埠(依 server.js 預設為 3000,可自行調整)
# -------------------------------------------------
EXPOSE 3000
# -------------------------------------------------
# 設定容器啟動指令
# -------------------------------------------------
CMD ["npm", "run", "start"]