本地開發
本頁面適用於想要複製儲存庫、本地建置映像或自訂 Dockerfile 的開發者。如果您只是想使用預建容器,請參閱快速入門。
git clone https://github.com/f5-sales-demo/devcontainer.gitcd 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) configurationdocker-compose.build.yml 檔案提供本地建置支援。它不會自動合併——您必須使用 -f 旗標明確傳入。這表示無論您是否複製了儲存庫,docker compose up -d(或 podman-compose up -d)始終會從 GHCR 拉取預建映像。
您可以驗證單純的 docker compose up 僅使用預建映像(無 build: 內容):
docker compose config與明確的建置設定進行比較:
docker compose -f docker-compose.yml -f docker-compose.build.yml config您可以驗證單純的 podman-compose up 僅使用預建映像(無 build: 內容):
podman-compose config與明確的建置設定進行比較:
podman-compose -f docker-compose.yml -f docker-compose.build.yml configdocker compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildpodman-compose -f docker-compose.yml -f docker-compose.build.yml up -d --build這會將建置檔案與基礎 compose 檔案合併,從本地 Dockerfile 建置映像,並啟動容器。--build 旗標會強制重新建置,即使快取映像已存在。
兩階段建置架構
Section titled “兩階段建置架構”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. Rust | rustup(系統層級,最新穩定版) |
| 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 gems | wpscan、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 MCP | Chrome 符號連結 + MCP 預快取 + 無頭模式修補 |
| 14. Homebrew | Linuxbrew(AI 助手依賴 + 格式化工具) |
| 15. ZSH 外掛 | oh-my-zsh 自訂外掛 |
| 16. Shell 初始化 | npm-global、tfenv、compinit |
| 17. Claude Code + Codex 設定 | 工具感知記憶、管理策略、自我測試腳本、Codex 設定 |
| 18. 進入點 | 容器啟動腳本(絕對最後的 COPY) |
編輯 Dockerfile 並將您的工具加入適當的區段。新增後重新建置:
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildpodman-compose -f docker-compose.yml -f docker-compose.build.yml up -d --build或在 VS Code 中:Dev Containers → Rebuild Container。
APT 套件
Section titled “APT 套件”加入第 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/*npm 工具
Section titled “npm 工具”加入第 11 區段的 npm install -g 區塊:
RUN npm install -g \ your-npm-toolpip 工具
Section titled “pip 工具”加入第 12 區段的 pip install 區塊:
RUN pip install --no-cache-dir --break-system-packages \ your-python-tool二進位檔下載
Section titled “二進位檔下載”加入第 10 區段或建立新的 RUN 層並使用架構偵測:
RUN ARCH=$(dpkg --print-architecture) \ && curl -fsSL "https://example.com/tool-linux-${ARCH}.tar.gz" \ | tar -xz -C /usr/local/bin toolCI 使用基於登錄檔的快取——建置層儲存在 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 分鐘)