写在最前
1. Buildx
1.1 部署安装
发布日期:2024 年 6 月 25 日
GitHub 页面:
https://github.com/docker/buildx/releases/tag/v0.26.1
# 创建 CLI 插件目录(如果不存在)
mkdir -p ~/.docker/cli-plugins
# 下载 buildx v0.26.1 for linux-amd64
curl -L https://github.com/docker/buildx/releases/download/v0.26.1/buildx-v0.26.1.linux-amd64 -o ~/.docker/cli-plugins/docker-buildx
# 添加执行权限
chmod +x ~/.docker/cli-plugins/docker-buildx
# 查看版本确认成功
docker buildx version
[root@localhost ~]# # 下载 buildx v0.26.1 for linux-amd64
[root@localhost ~]# curl -L https://github.com/docker/buildx/releases/download/v0.26.1/buildx-v0.26.1.linux-amd64 -o ~/.docker/cli-plugins/docker-buildx
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 64.5M 100 64.5M 0 0 11.2M 0 0:00:05 0:00:05 --:--:-- 14.4M
[root@localhost ~]# # 添加执行权限
[root@localhost ~]# chmod +x ~/.docker/cli-plugins/docker-buildx
[root@localhost ~]# # 查看版本确认成功
[root@localhost ~]# docker buildx version
github.com/docker/buildx v0.26.1 1a8287f22cf5a38339a4c1bf432b803c5f8b2aae
[root@localhost ~]#
1.2 代理配置
172.31.0.1:7890 是我在 Windows 上通过 Clash for Windows 配置的代理端口,用来让容器或其他服务访问外网资源(如 docker.io)。
#创建buildx环境,并使用本机代理
docker buildx create --use --name mybuilder --driver-opt env.http_proxy=172.31.0.1:7890 --driver-opt env.https_proxy=172.31.0.1:7890
#修改所使用的buildx环境
docker buildx use mybuilder
#使用完毕后如果你不想要这个代理网络了,可以删除环境
docker buildx rm mybuilder
1.3 使用方式
# 默认构建出来使用docker images是看不到的,你要么使用--push直接推送上去仓库,要么使用--load才能使用docker images看到
# --progress=plain 输出详细格式化后的内容
docker buildx build --platform linux/amd64,linux/arm64 --push -t tanqidi/builder-base:v3.1.0-podman .
2. 试验流程
为了支持在 ARM 架构上部署 Kubesphere 3.4.1 的 DevOps 流水线,官方没有提供相应的 ARM 架构镜像。因此,我们将自己动手构建这些镜像,以确保能够在 ARM 环境中顺利运行。
2.1 分析镜像层级
在 v3.2.0 的 maven/podman/Dockerfile
中,我们注意到其基础镜像使用的是 kubespheredev/builder-base:v3.1.0-podman
。经过确认,这个镜像目前仅支持 amd64 架构,并不包含 arm64。因此问题的根源就在这里。要在 ARM 架构上构建 builder-maven:v3.2.0-podman
,我们必须先将 builder-base:v3.1.0-podman
适配为 arm64 架构,这样才能顺利完成后续镜像的构建。
2.2 构建 builder-base:v3.1.0-podman
FROM almalinux:9.4
# utils
RUN yum update -y && yum install -y epel-release && \
yum install -y unzip \
glibc-locale-source glibc-langpack-zh glibc-langpack-en \
which \
make \
wget \
zip \
bzip2 \
gcc \
gcc-c++ \
curl-devel \
autoconf \
expat-devel \
gettext-devel \
openssl-devel \
perl-devel \
zlib-devel \
python-pip \
git \
java-1.8.0-openjdk && \
yum -y clean all --enablerepo='*'
# Set the locale(en_US.UTF-8)
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
# USER jenkins
WORKDIR /home/jenkins
ENV SONAR_SCANNER_VERSION 3.3.0.1492
RUN curl -o sonar_scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${SONAR_SCANNER_VERSION}-linux.zip && \
unzip sonar_scanner.zip && rm sonar_scanner.zip \
&& rm -rf sonar-scanner-$SONAR_SCANNER_VERSION-linux/jre && \
sed -i 's/use_embedded_jre=true/use_embedded_jre=false/g' /home/jenkins/sonar-scanner-$SONAR_SCANNER_VERSION-linux/bin/sonar-scanner && \
mv /home/jenkins/sonar-scanner-$SONAR_SCANNER_VERSION-linux /usr/bin
ENV PATH $PATH:/usr/bin/sonar-scanner-$SONAR_SCANNER_VERSION-linux/bin
COPY ./ ./
RUN ./hack/install_utils.sh && rm -rf ./*
CMD ["docker","version"]
docker buildx build --platform linux/arm64 --push -t tanqidi/builder-base:v3.1.0-podman .
2.3 构建 builder-maven:v3.2.0-podman
FROM tanqidi/builder-base:v3.1.0-podman
# ----------- Java (固定版本,ARM64) ------------
RUN curl -fsSL https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u392-b08/OpenJDK8U-jdk_aarch64_linux_hotspot_8u392b08.tar.gz \
| tar -xz -C /opt && \
mv /opt/jdk8u392-b08 /opt/java
ENV JAVA_HOME=/opt/java
ENV PATH="${JAVA_HOME}/bin:${PATH}"
# ----------- Maven(固定版本) ------------
RUN curl -fsSL https://archive.apache.org/dist/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz \
| tar -xz -C /opt && \
mv /opt/apache-maven-3.5.3 /opt/maven
ENV M2_HOME=/opt/maven
ENV PATH="${M2_HOME}/bin:${PATH}"
# ----------- Ant(固定版本,可选) ------------
RUN curl -fsSL https://archive.apache.org/dist/ant/binaries/apache-ant-1.10.7-bin.tar.gz \
| tar -xz -C /opt && \
mv /opt/apache-ant-1.10.7 /opt/ant
ENV ANT_HOME=/opt/ant
ENV PATH="${ANT_HOME}/bin:${PATH}"
# 默认运行 Maven 版本查看
CMD ["mvn", "-version"]
# --progress=plain 输出详细格式化后的内容
docker buildx build --platform linux/arm64 --progress=plain --push -t tanqidi/builder-maven:v3.2.0-podman .
3. 镜像成品
tanqidi/builder-maven:v3.2.0-podman