41 lines
2.6 KiB
Docker
41 lines
2.6 KiB
Docker
# =============================================================================
|
||
# 用途:本 Dockerfile 採「單階段建置(single-stage build)」產出 codex CLI 映像。
|
||
# 以 node-slim 為基底,透過 npm 全域安裝 @openai/codex CLI 套件,
|
||
# 並額外安裝 ca-certificates 以支援 HTTPS 連線,
|
||
# 最終映像預設執行 `codex --version`。
|
||
# 更新日期:2026/07/01 09:58:04
|
||
# =============================================================================
|
||
|
||
# syntax 指示詞:指定使用 dockerfile:1 前端語法,啟用 BuildKit 進階功能(必須置於檔首第一行有效指令)
|
||
# syntax=docker/dockerfile:1
|
||
|
||
# 1. 參數處理:映像檔版本與套件版本皆直接寫死,無可調參數需以 ARG 注入(略)
|
||
|
||
# ---- 單一建置階段:安裝 codex CLI 套件 ----
|
||
# FROM node:22-slim:以 node 22 slim 版為基底開啟唯一建置階段(slim 版較精簡)
|
||
FROM node:22-slim
|
||
|
||
# ENV DEBIAN_FRONTEND=noninteractive:設定 Debian 套件管理為非互動模式,避免 apt 安裝時跳出互動提示而卡住建置
|
||
ENV DEBIAN_FRONTEND=noninteractive
|
||
|
||
# 2. 安裝套件:先以 apt 安裝 codex 進行 HTTPS 連線所需的 ca-certificates,再以 npm 全域安裝 @openai/codex CLI
|
||
# 官方 node image 的全域安裝前綴為 /usr/local,套件與其相依落於 /usr/local/lib/node_modules,bin symlink 落於 /usr/local/bin
|
||
# (單階段無跨階段 COPY,npm 建立的 /usr/local/bin/codex symlink 原地保留、指向正確,可正常解析平台原生相依)
|
||
# RUN:apt 安裝 ca-certificates(--no-install-recommends 不裝建議套件)→ npm 全域安裝 codex →
|
||
# 於同一層合併清理 apt 索引快取與 npm 快取,避免快取檔殘留而膨脹該層
|
||
RUN apt-get update \
|
||
&& apt-get install -y --no-install-recommends \
|
||
ca-certificates \
|
||
&& npm install -g @openai/codex \
|
||
&& npm cache clean --force \
|
||
&& apt-get clean \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
# 3. 複製檔案:本映像為純 CLI 工具安裝,無專案原始碼需複製(略)
|
||
# 4. 執行程序:codex 為預編譯 npm 套件,無 build / compile / transpile 步驟(略)
|
||
|
||
# 5. 縮小映像檔:單階段下透過「slim 基底 + --no-install-recommends + 安裝與清理合併於同層(見步驟 2)」達成縮小,故此處無獨立清理指令
|
||
# 6. 設定入口:CMD 置於最後,語意與原檔一致
|
||
# CMD:容器啟動時的預設執行指令,預設執行 `codex --version` 顯示版本(exec form,不經 shell);可於 docker run 時覆寫
|
||
CMD ["codex", "--version"]
|