跳到內容

本地開發

本頁面適用於想要複製儲存庫、本地建置映像或自訂 Dockerfile 的開發者。如果您只是想使用預建容器,請參閱快速入門

Terminal window
git clone https://github.com/f5-sales-demo/devcontainer.git
cd devcontainer
.
├── Dockerfile # Multi-stage image build
├── docker-compose.yml # Base compose — pulls pre-built image
├── docker-compose.build.yml # Build override — use explicitly with -f
├── .devcontainer/ # VS Code Dev Container config
│ └── devcontainer.json
├── entrypoint.sh # Container startup script
├── .env.example # Example environment variables
├── docs/ # Documentation site (Starlight)
├── claude-config/ # Claude Code configuration files
├── codex-config/ # Codex configuration
├── pi-config/ # Pi configuration
└── omp-config/ # Oh-My-Pi (omp) configuration

docker-compose.build.yml 檔案提供本地建置支援。它不會自動合併——您必須使用 -f 旗標明確傳入。這表示無論您是否複製了儲存庫,docker compose up -d(或 podman-compose up -d)始終會從 GHCR 拉取預建映像。

您可以驗證單純的 docker compose up 僅使用預建映像(無 build: 內容):

Terminal window
docker compose config

與明確的建置設定進行比較:

Terminal window
docker compose -f docker-compose.yml -f docker-compose.build.yml config
Terminal window
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build

這會將建置檔案與基礎 compose 檔案合併,從本地 Dockerfile 建置映像,並啟動容器。--build 旗標會強制重新建置,即使快取映像已存在。

Dockerfile 使用針對 Docker 層快取最佳化的兩階段建置:

第 1 階段:deps(穩定基礎,約 4.5 GB)

Section titled “第 1 階段:deps(穩定基礎,約 4.5 GB)”

這些層僅在版本 ARG 更新或 APT 套件變更時才會重新建置。在一般僅工具變更時,BuildKit 會跳過整個階段。

區段內容
1. APT 儲存庫NodeSource、deadsnakes、HashiCorp、GitHub、Docker、Microsoft、Google Cloud、Dart SDK
2. APT 套件系統工具、Node.js、Python、Java、Terraform、GitHub CLI、Docker 引擎、Azure CLI、PowerShell、語系
2b. 安全性 APT 套件網路分析、網頁掃描器、密碼工具、逆向工程、鑑識(約 80 個套件)
3. Python 初始化符號連結 + 透過 get-pip.py 安裝 pip
4. Go官方壓縮檔(最新穩定版,建置時解析)
5. Rustrustup(系統層級,最新穩定版)
6. Maven + Gradle二進位檔下載至 /opt
7. VNC 堆疊Xvfb、x11vnc、noVNC、fluxbox — 透過瀏覽器遠端顯示
8. Nerd 字型JetBrainsMono、Hack、FiraCode(最新版本)

第 2 階段:final(易變工具 + 使用者設定,約 1.5 GB)

Section titled “第 2 階段:final(易變工具 + 使用者設定,約 1.5 GB)”

這些層變更較頻繁(npm/pip 更新、設定變更),但因為較大的 deps 階段已快取,重新建置速度很快。

區段內容
9. AWS CLI v2官方安裝程式
10. 二進位工具kubectl、helm、tflint、terraform-docs、act、actionlint、yt-dlp、uv
10b. 額外二進位檔VS Code CLI、oc、yq、terragrunt、ibmcloud、fzf、hadolint、codex
10c. Super-linter 二進位檔shfmt、gitleaks、editorconfig-checker、trivy、clj-kondo、dotenv-linter、golangci-lint、goreleaser、kubeconform、protolint、scalafmt、ktlint
10d. Java JAR 工具checkstyle、google-java-format(包裝腳本)
10e. PHP 檢查工具phpcs、phpstan、psalm(PHAR 下載)
10f. PowerShell 模組PSScriptAnalyzer、arm-ttk
10g. 安全性二進位檔nuclei、subfinder、httpx、ffuf、gobuster、feroxbuster、dalfox、amass、trufflehog、grype、syft、bettercap(amd64)
10h. OWASP ZAP基於 Java 的網頁應用程式掃描器
10i. Ghidra逆向工程框架
10j. Metasploit滲透測試框架(僅 amd64)
11. npm 全域工具claude-code、prettier、markdownlint-cli2、devcontainers-cli、playwright、pi-coding-agent、oh-my-pi
12. pip 工具pre-commit、ansible、black、pylint、yamllint、playwright
12c. Ruby 檢查工具rubocop + 擴充套件
12e. Perl 檢查模組Perl::Critic 擴充套件
12f. Lua 檢查工具luacheck
12g. R 檢查工具lintr
12h. 安全性 Ruby gemswpscan、evil-winrm
12i. Git 複製的安全性工具testssl.sh、exploitdb (searchsploit)、SecLists、docker-bench-security、recon-ng、spiderfoot
13. Playwright 瀏覽器Chromium + 透過 playwright install --with-deps 安裝系統依賴
13b. Chrome DevTools MCPChrome 符號連結 + MCP 預快取 + 無頭模式修補
14. HomebrewLinuxbrew(AI 助手依賴 + 格式化工具)
15. ZSH 外掛oh-my-zsh 自訂外掛
16. Shell 初始化npm-global、tfenv、compinit
17. Claude Code + Codex 設定工具感知記憶、管理策略、自我測試腳本、Codex 設定
18. 進入點容器啟動腳本(絕對最後的 COPY)

編輯 Dockerfile 並將您的工具加入適當的區段。新增後重新建置:

Terminal window
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build

或在 VS Code 中:Dev Containers → Rebuild Container

加入第 2 區段的 apt-get install 區塊:

RUN apt-get update && apt-get install -y --no-install-recommends \
your-package-here \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

加入第 11 區段的 npm install -g 區塊:

RUN npm install -g \
your-npm-tool

加入第 12 區段的 pip install 區塊:

RUN pip install --no-cache-dir --break-system-packages \
your-python-tool

加入第 10 區段或建立新的 RUN 層並使用架構偵測:

RUN ARCH=$(dpkg --print-architecture) \
&& curl -fsSL "https://example.com/tool-linux-${ARCH}.tar.gz" \
| tar -xz -C /usr/local/bin tool

CI 使用基於登錄檔的快取——建置層儲存在 GHCR(ghcr.io/f5-sales-demo/devcontainer:cache-*)中,而非 GitHub Actions 快取。這避免了 10 GB GHA 快取限制,該限制曾導致此約 6 GB 多架構映像頻繁進行完整重新建置。

兩階段架構與登錄檔快取協同運作,使得:

  • 工具版本更新(npm、pip、二進位工具)——僅重新建置 final 階段(約 5 分鐘)
  • 設定檔變更claude-config/entrypoint.sh)——僅重新建置最後幾層(約 1 分鐘)
  • 基礎變更(APT 套件、Go/Rust/Java 版本)——兩個階段完整重新建置(約 30 分鐘)