跳转到内容

本地开发

本页面面向希望克隆仓库、在本地构建镜像或自定义 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 包网络分析、Web 扫描器、密码工具、逆向工程、取证(约 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 的 Web 应用扫描器
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 分钟)