用途:处理几乎所有 Docker 相关任务,包括编写 Dockerfile、配置 docker-compose/compose.yml、多阶段构建、docker-bake.hcl 与容器安全加固。
主要能力与原则:最小化(Alpine/distroless、多阶段)、安全(非 root USER、不在层中留密钥、锁定版本)、可测试(绕过 entrypoint、模拟 DNS)、缓存高效(先复制依赖文件再复制源码、层内清理)。
典型用法:多阶段构建 Node.js 时先在 builder 阶段 npm ci --only=production,再复制到运行阶段,addgroup/adduser 后 USER app,并用 HEALTHCHECK 探测;Go 可用 scratch/distroless 静态镜像。依赖层先于源码复制以复用缓存。构建密钥使用 BuildKit 的 --mount=type=secret,避免 ARG 经 docker history 与 SLSA 溯源泄漏。docker-bake.hcl 可声明多平台 platforms 与 cache-from/cache-to。
compose 要点:depends_on 配合 condition: service_healthy 与 healthcheck start_period 控制启动顺序;networks.internal 隔离数据库;profiles 仅在指定 --profile 时启动;镜像引用可用顶层扩展字段加锚点定义一次,锚点须位于 services 之前,且锚点是文件局部的,每个 overlay 文件需各自定义。
安全反模式及修复:使用 latest 应改为锁定版本;无 USER 指令应添加非 root 用户;chmod 777 改为具体权限;privileged: true 应移除或改用 cap_add;避免挂载 / 到宿主、避免端口绑定 0.0.0.0、避免在 ENV 中写明文密码。
CI 测试注意:用 --entrypoint 绕过入口;用 --add-host 模拟上游 DNS;docker compose config 前先准备 .env;密钥扫描需排除示例与文档;绑定挂载可能产生 root 属主文件导致 EACCES。
.dockerignore 建议排除 .git、node_modules/vendor、.env*、.pem、.key 等。资料还列出 CI 测试、DinD、GPG 校验、注册表固定轮换、构建密钥泄漏、php-fpm 饥饿、引擎与镜像升级等参考主题,但未提供更多细节与价格信息,暂未提供。