# syntax=docker/dockerfile:1 # ============================================================================= # 此 Dockerfile 的用途: # 建置 Release Cleanup docker container action 的映像。 # 以 node alpine 為基底,複製 app/ 主程式與 entrypoint.sh,設定入口。 # # 更新日期(台灣時區 Asia/Taipei):2026/07/01 09:14:10 # ============================================================================= # ----------------------------------------------------------------------------- # 1. 參數處理:node base image tag 以 ARG 注入 # - 預設 lts-alpine;建置時可用 --build-arg NODE_VERSION=... 覆寫 # - 主程式以原生 fetch 呼叫 Gitea API(需 Node 18+),alpine 為最小可用基底 # ----------------------------------------------------------------------------- # 宣告可覆寫的建置參數 NODE_VERSION,預設值 lts-alpine ARG NODE_VERSION=lts-alpine # 以 node:${NODE_VERSION} 作為基底映像;引用上方 ARG 決定實際 node 版本/變體 FROM node:${NODE_VERSION} # ----------------------------------------------------------------------------- # 2. 安裝套件:主程式無第三方相依,亦未呼叫外部執行檔 # (不需 curl/jq/git 等 OS 套件),故略過此步驟 # ----------------------------------------------------------------------------- # 設定後續指令的工作目錄為 /app;不存在時會自動建立,COPY 的相對目的地以此為基準 WORKDIR /app # ----------------------------------------------------------------------------- # 3. 複製檔案:主程式(app/)與啟動腳本 # ----------------------------------------------------------------------------- # 複製 app/ 目錄全部內容到映像內 /app/(主程式,含 index.js 進入點;須與 entrypoint.sh 的 /app/index.js 一致) COPY app/ /app/ # 複製啟動腳本到映像根目錄 /entrypoint.sh(供 ENTRYPOINT 使用) COPY entrypoint.sh /entrypoint.sh # ----------------------------------------------------------------------------- # 4. 執行程序:賦予啟動腳本執行權限 # - 無 build/transpile 需求,故不執行建置 # ----------------------------------------------------------------------------- # 對 /entrypoint.sh 加上可執行權限,確保容器啟動時能直接執行該腳本 RUN chmod +x /entrypoint.sh # ----------------------------------------------------------------------------- # 5. 縮小映像檔:無相依、無 build 產物可裁剪,alpine 單階段即為最小映像, # 多階段建置在此無縮小效益,故不採用 # ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- # 6. 設定入口:以 entrypoint.sh 啟動(其內 node 指向 /app/index.js) # ----------------------------------------------------------------------------- # 設定容器進入點為 /entrypoint.sh(exec 形式);容器啟動即執行該腳本 ENTRYPOINT ["/entrypoint.sh"]