<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 675" role="img" aria-labelledby="title desc">
  <title id="title">容器化开发闭环流程</title>
  <desc id="desc">展示从代码、Dockerfile、本地运行、日志调试到提交CI的容器化开发闭环</desc>
  <defs>
    <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#fff1f2"/><stop offset="0.5" stop-color="#f0fdfa"/><stop offset="1" stop-color="#fef9c3"/></linearGradient>
    <filter id="shadow"><feDropShadow dx="0" dy="8" stdDeviation="9" flood-color="#334155" flood-opacity="0.15"/></filter>
    <marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="8" markerHeight="8" orient="auto"><path d="M0 0L10 5L0 10Z" fill="#be123c"/></marker>
  </defs>
  <rect width="1200" height="675" fill="url(#bg)"/>
  <text x="70" y="72" font-size="34" font-weight="700" fill="#111827">容器化开发：让本地、测试和CI使用同一套运行单元</text>
  <text x="72" y="108" font-size="18" fill="#475569">开发者关注的不是“把应用塞进容器”，而是建立可复现、可调试、可回滚的日常闭环。</text>

  <g filter="url(#shadow)" font-size="18">
    <rect x="72" y="220" width="170" height="118" rx="28" fill="#ffffff" stroke="#fb7185" stroke-width="3"/>
    <text x="118" y="264" font-size="23" font-weight="700" fill="#be123c">代码</text>
    <text x="103" y="300" fill="#64748b">业务变更</text>

    <rect x="302" y="180" width="190" height="150" rx="28" fill="#ffffff" stroke="#f59e0b" stroke-width="3"/>
    <text x="342" y="224" font-size="23" font-weight="700" fill="#92400e">Dockerfile</text>
    <text x="333" y="262" fill="#64748b">基础镜像</text>
    <text x="333" y="292" fill="#64748b">依赖与启动命令</text>

    <rect x="560" y="210" width="180" height="128" rx="28" fill="#ffffff" stroke="#14b8a6" stroke-width="3"/>
    <text x="611" y="254" font-size="23" font-weight="700" fill="#0f766e">本地运行</text>
    <text x="590" y="292" fill="#64748b">端口 / 环境变量</text>

    <rect x="795" y="180" width="170" height="150" rx="28" fill="#ffffff" stroke="#6366f1" stroke-width="3"/>
    <text x="835" y="224" font-size="23" font-weight="700" fill="#4338ca">调试</text>
    <text x="832" y="262" fill="#64748b">日志</text>
    <text x="832" y="292" fill="#64748b">健康检查</text>

    <rect x="1018" y="220" width="150" height="118" rx="28" fill="#ffffff" stroke="#22c55e" stroke-width="3"/>
    <text x="1061" y="264" font-size="23" font-weight="700" fill="#15803d">提交</text>
    <text x="1048" y="300" fill="#64748b">进入 CI</text>
  </g>

  <path d="M244 270 C270 260 280 252 300 252" stroke="#be123c" stroke-width="5" fill="none" marker-end="url(#arrow)"/>
  <path d="M493 255 C520 255 532 260 558 272" stroke="#be123c" stroke-width="5" fill="none" marker-end="url(#arrow)"/>
  <path d="M742 272 C765 260 777 252 793 252" stroke="#be123c" stroke-width="5" fill="none" marker-end="url(#arrow)"/>
  <path d="M967 252 C990 260 1002 268 1016 276" stroke="#be123c" stroke-width="5" fill="none" marker-end="url(#arrow)"/>
  <path d="M1090 340 C1055 492 245 510 160 340" stroke="#be123c" stroke-width="4" stroke-dasharray="10 9" fill="none" marker-end="url(#arrow)"/>
  <text x="490" y="548" font-size="19" font-weight="700" fill="#9f1239">反馈回路：日志与CI失败结果回到代码和Dockerfile</text>

  <rect x="150" y="585" width="900" height="44" rx="22" fill="#ffffff" opacity="0.85"/>
  <text x="195" y="613" font-size="17" fill="#334155">PACE 关注原则、模板、检查项与例外；CLEAR 关注环境、步骤、断言、失败分支与回滚。</text>
</svg>
