<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Buildx - tag - 沐木</title><link>https://oldletter.cn/tags/buildx/</link><description>Buildx - tag - 沐木</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sat, 15 Feb 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://oldletter.cn/tags/buildx/" rel="self" type="application/rss+xml"/><item><title>信创实战：Dockerfile 信创基础镜像构建</title><link>https://oldletter.cn/posts/xinchuang-02-dockerfile/</link><pubDate>Sat, 15 Feb 2025 00:00:00 +0000</pubDate><author>mumu</author><guid>https://oldletter.cn/posts/xinchuang-02-dockerfile/</guid><description><![CDATA[<blockquote>
<p>系列：信创国产化适配 | 作者：lin | 日期：2026-05-15</p></blockquote>
<hr>
<h2 id="一背景与问题">一、背景与问题</h2>
<h3 id="11-为什么信创环境需要自定义-docker-镜像">1.1 为什么信创环境需要自定义 Docker 镜像</h3>
<p>在信创国产化落地过程中，Docker 容器化部署是标配。但直接使用官方镜像会遇到以下问题：</p>
<ol>
<li><strong>架构不匹配</strong>：官方 Docker Hub 上的 OpenJDK 镜像主要提供 <code>amd64</code> 和 <code>aarch64</code>，缺少申威 <code>sw64</code>、龙芯 <code>loongarch64</code> 等国产架构</li>
<li><strong>OS 不兼容</strong>：信创环境通常要求使用国产操作系统（麒麟、统信），而官方镜像基于 Debian/Ubuntu</li>
<li><strong>安全合规</strong>：信创项目通常要求使用经过安全审计的基础镜像，不能直接拉取公网镜像</li>
<li><strong>定制需求</strong>：需要预装特定工具、配置国内镜像源、设置时区和 Locale 等</li>
</ol>
<h3 id="12-基础镜像选型对比">1.2 基础镜像选型对比</h3>
<table>
  <thead>
      <tr>
          <th>镜像</th>
          <th>体积</th>
          <th>包管理</th>
          <th>国产 CPU 支持</th>
          <th>适用场景</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Alpine 3.20</strong></td>
          <td>~5MB</td>
          <td>apk</td>
          <td>仅 x86/arm64（申威/龙芯需基于国产OS）</td>
          <td>追求极致精简</td>
      </tr>
      <tr>
          <td><strong>Ubuntu 22.04</strong></td>
          <td>~77MB</td>
          <td>apt</td>
          <td>较好</td>
          <td>需要 glibc 环境</td>
      </tr>
      <tr>
          <td><strong>麒麟 V10</strong></td>
          <td>~200MB</td>
          <td>yum/dnf</td>
          <td>原生支持</td>
          <td>信创验收要求</td>
      </tr>
      <tr>
          <td><strong>统信 UOS</strong></td>
          <td>~200MB</td>
          <td>apt</td>
          <td>原生支持</td>
          <td>信创验收要求</td>
      </tr>
      <tr>
          <td><strong>Amazon Corretto</strong></td>
          <td>基于 Alpine</td>
          <td>apk</td>
          <td>官方多架构</td>
          <td>生产推荐</td>
      </tr>
  </tbody>
</table>
<div class="details admonition tip open">
    <div class="details-summary admonition-title">
        <i class="icon far fa-lightbulb" aria-hidden="true"></i>镜像选型建议<i class="details-icon fas fa-angle-right" aria-hidden="true"></i>
    </div>
    <div class="details-content">
        <div class="admonition-content"><strong>鲲鹏 ARM64</strong>：直接使用 Amazon Corretto 官方多架构镜像。<strong>申威 SW64 / 龙芯 LoongArch</strong>：Alpine 官方不支持这两种架构，必须基于国产 OS（龙芯开源系统、统信 UOS、麒麟 V10 等）自行构建基础镜像。<strong>信创验收场景</strong>：基于麒麟/统信构建，满足安全审查要求。所有国产 CPU 环境都建议提前规划内部镜像仓库。</div>
    </div>
</div>
<hr>
<h2 id="二amazon-corretto-8-jdk-镜像构建alpine-320">二、Amazon Corretto 8 JDK 镜像构建（Alpine 3.20）</h2>
<h3 id="21-完整-dockerfile">2.1 完整 Dockerfile</h3>
<div class="code-block code-line-numbers" style="counter-reset: code-block 0">
    <div class="code-header language-dockerfile">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title=""><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-dockerfile" data-lang="dockerfile"><span class="line"><span class="cl"><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># 信创基础镜像：Amazon Corretto 8 JDK (Alpine 3.20)</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># 支持架构：x86_64, aarch64（鲲鹏）</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># 适用场景：Java 微服务基础运行环境</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">FROM</span><span class="s"> alpine:3.20</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># 镜像元信息</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">LABEL</span> <span class="nv">maintainer</span><span class="o">=</span><span class="s2">&#34;lin&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>      <span class="nv">description</span><span class="o">=</span><span class="s2">&#34;Amazon Corretto 8 JDK for xinchuang&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>      <span class="nv">version</span><span class="o">=</span><span class="s2">&#34;8u422&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>      architecture.multiarch<span class="o">=</span><span class="s2">&#34;true&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># 环境变量</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># Corretto 版本（可通过构建参数覆盖）</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">ARG</span> <span class="nv">CORRETTO_VERSION</span><span class="o">=</span><span class="m">8</span>.422.05.1<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">ARG</span> <span class="nv">CORRETTO_SHA256_AMD64</span><span class="o">=</span>a7b7e2f8c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0
</span></span><span class="line"><span class="cl"><span class="k">ARG</span> <span class="nv">CORRETTO_SHA256_AARCH64</span><span class="o">=</span>b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">ENV</span> <span class="nv">JAVA_HOME</span><span class="o">=</span>/usr/lib/jvm/java-1.8.0-amazon-corretto <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    <span class="nv">PATH</span><span class="o">=</span><span class="s2">&#34;/usr/lib/jvm/java-1.8.0-amazon-corretto/bin:</span><span class="si">${</span><span class="nv">PATH</span><span class="si">}</span><span class="s2">&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    <span class="nv">LANG</span><span class="o">=</span>en_US.UTF-8 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    <span class="nv">LC_ALL</span><span class="o">=</span>en_US.UTF-8 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    <span class="nv">TZ</span><span class="o">=</span>Asia/Shanghai <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    <span class="c1"># JVM 默认参数（可通过环境变量覆盖）</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span>    <span class="nv">JAVA_OPTS</span><span class="o">=</span><span class="s2">&#34;-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Djava.security.egd=file:/dev/./urandom&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># 安装基础依赖 + 配置国内镜像源</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># 使用阿里云镜像源加速（信创环境通常无法直接访问 dl-cdn.alpinelinux.org）</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">RUN</span> sed -i <span class="s1">&#39;s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g&#39;</span> /etc/apk/repositories <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    apk add --no-cache <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        bash <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        curl <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        wget <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        tzdata <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        ca-certificates <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        fontconfig <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        ttf-dejavu <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        busybox-extras <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        procps <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        gzip <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        tar <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        zip <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        unzip <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    <span class="o">&amp;&amp;</span> rm -rf /var/cache/apk/*<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># 时区配置</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">RUN</span> ln -sf /usr/share/zoneinfo/<span class="si">${</span><span class="nv">TZ</span><span class="si">}</span> /etc/localtime <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    <span class="nb">echo</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">TZ</span><span class="si">}</span><span class="s2">&#34;</span> &gt; /etc/timezone<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># Locale 配置</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">ENV</span> <span class="nv">LANG</span><span class="o">=</span>en_US.UTF-8 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    <span class="nv">LANGUAGE</span><span class="o">=</span>en_US:en <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    <span class="nv">LC_ALL</span><span class="o">=</span>en_US.UTF-8<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># 安装 Amazon Corretto 8 JDK</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">RUN</span> <span class="nv">ARCH</span><span class="o">=</span><span class="k">$(</span>uname -m<span class="k">)</span> <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    <span class="k">case</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">ARCH</span><span class="si">}</span><span class="s2">&#34;</span> in <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        x86_64<span class="o">)</span>  <span class="nv">CORRETTO_ARCH</span><span class="o">=</span><span class="s2">&#34;x64&#34;</span> <span class="p">;;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        aarch64<span class="o">)</span> <span class="nv">CORRETTO_ARCH</span><span class="o">=</span><span class="s2">&#34;aarch64&#34;</span> <span class="p">;;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        *<span class="o">)</span>       <span class="nb">echo</span> <span class="s2">&#34;Unsupported architecture: </span><span class="si">${</span><span class="nv">ARCH</span><span class="si">}</span><span class="s2">&#34;</span> <span class="o">&amp;&amp;</span> <span class="nb">exit</span> <span class="m">1</span> <span class="p">;;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    <span class="k">esac</span> <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    wget -q -O /tmp/corretto.tar.gz <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>        <span class="s2">&#34;https://corretto.aws/downloads/latest/amazon-corretto-</span><span class="si">${</span><span class="nv">CORRETTO_VERSION</span><span class="si">}</span><span class="s2">-linux-</span><span class="si">${</span><span class="nv">CORRETTO_ARCH</span><span class="si">}</span><span class="s2">-jdk.tar.gz&#34;</span> <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    mkdir -p /usr/lib/jvm <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    tar -xzf /tmp/corretto.tar.gz -C /usr/lib/jvm <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    ln -sf /usr/lib/jvm/amazon-corretto-<span class="si">${</span><span class="nv">CORRETTO_VERSION</span><span class="si">}</span>-linux-<span class="si">${</span><span class="nv">CORRETTO_ARCH</span><span class="si">}</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>           /usr/lib/jvm/java-1.8.0-amazon-corretto <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    rm -f /tmp/corretto.tar.gz <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    java -version<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># 内置健康检查脚本：java-info</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># ============================================================</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">RUN</span> cat &gt; /usr/local/bin/java-info &lt;&lt; <span class="s1">&#39;SCRIPT&#39;</span> <span class="o">&amp;&amp;</span> chmod +x /usr/local/bin/java-info<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c">#!/bin/bash</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;=========================================&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;  Java Environment Info&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;=========================================&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;📦 JDK Version:&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span>java -version 2&gt;<span class="p">&amp;</span><span class="m">1</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;📁 JAVA_HOME: </span><span class="si">${</span><span class="nv">JAVA_HOME</span><span class="si">}</span><span class="s2">&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;🏗️  Architecture: </span><span class="k">$(</span>uname -m<span class="k">)</span><span class="s2">&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;🐧 OS: </span><span class="k">$(</span>cat /etc/os-release 2&gt;/dev/null <span class="p">|</span> grep PRETTY_NAME <span class="p">|</span> cut -d<span class="o">=</span> -f2 <span class="p">|</span> tr -d <span class="s1">&#39;&#34;&#39;</span><span class="k">)</span><span class="s2">&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;🕐 Timezone: </span><span class="k">$(</span>cat /etc/timezone 2&gt;/dev/null <span class="o">||</span> <span class="nb">echo</span> <span class="s1">&#39;not set&#39;</span><span class="k">)</span><span class="s2">&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;💾 Memory:&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span>free -h 2&gt;/dev/null <span class="o">||</span> <span class="nb">echo</span> <span class="s2">&#34;  (free command not available)&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;🔧 JVM System Properties (key ones):&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span>java -XshowSettings:all 2&gt;<span class="p">&amp;</span><span class="m">1</span> <span class="p">|</span> grep -E <span class="s2">&#34;(java.home|os.arch|os.name|file.encoding|user.timezone)&#34;</span> <span class="p">|</span> sed <span class="s1">&#39;s/^/  /&#39;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="nb">echo</span> <span class="s2">&#34;=========================================&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span>SCRIPT<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">WORKDIR</span><span class="s"> /app</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="k">CMD</span> <span class="p">[</span><span class="s2">&#34;bash&#34;</span><span class="p">]</span></span></span></code></pre></div></div>
<h3 id="22-构建与使用">2.2 构建与使用</h3>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title=""><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 构建镜像（单架构）</span>
</span></span><span class="line"><span class="cl">docker build -t xinchuang/corretto8-jdk:8u422-alpine3.20 .
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 验证</span>
</span></span><span class="line"><span class="cl">docker run --rm xinchuang/corretto8-jdk:8u422-alpine3.20 java-info</span></span></code></pre></div></div>
<hr>
<h2 id="三docker-buildx-多架构构建">三、Docker Buildx 多架构构建</h2>
<h3 id="31-buildx-基础概念">3.1 Buildx 基础概念</h3>
<p>Docker Buildx 是 Docker 的扩展构建工具，支持一次构建同时生成多架构镜像。在信创场景下，因此可以用一条命令同时构建 x86_64 和 ARM64 的镜像。</p>]]></description></item></channel></rss>