利用Docker Buildx实现x86_64到ARM64的高效跨架构镜像构建实践

docker buildx跨架构构建笔记(x86_64构建下构建aarch64镜像) Docker Buildx 是 Docker 团队为 Docker 引擎设计的一个工具,用于支持构建和管理多平台的容器镜像。它扩展了 Docker 构建工具,使得可以跨多个不同的架构和操作系统进行构建。 阅读详情

1. 为什么你需要关心跨架构镜像构建?

如果你手头只有一台普通的x86_64电脑(也就是我们常说的Intel或AMD芯片的电脑),但你的应用最终需要跑在树莓派、苹果M系列Mac、或者各种ARM架构的云服务器上,那你肯定遇到过这个头疼的问题:怎么为这些不同的“芯”打包软件?传统做法是,你得找一台对应架构的机器来编译和构建,这要么意味着你要额外购买硬件,要么就得在云端租用特定架构的服务器,费时费力还费钱。

Docker Buildx的出现,就是为了优雅地解决这个痛点。它让你能在自己熟悉的x86_64开发机上,直接构建出适用于ARM64(也就是aarch64)等其他架构的Docker镜像。这不仅仅是“能跑”,更是追求“高效构建”。想象一下,你可以在本地快速迭代、测试,而无需等待远程构建队列,也无需管理一堆不同架构的构建机器。对于个人开发者、小团队,或者需要在混合架构环境中部署应用的场景,这简直是生产力神器。

我自己在给边缘计算设备部署服务时,就深刻体会到了它的便利。以前每次更新代码,都得把代码传到远程的ARM服务器上编译,网络慢的时候简直煎熬。用了Buildx之后,所有构建工作都在本地完成,镜像做好直接推送到仓库,边缘设备拉取运行就行,整个流程丝滑了不止一个档次。所以,无论你是想为你的树莓派家庭服务器打包应用,还是为公司产品适配多种硬件平台,掌握Buildx的跨架构构建都是非常值得投入的一项技能。

2. 搭建你的跨架构构建环境

工欲善其事,必先利其器。在开始挥舞Buildx大棒之前,我们得先把“锻造炉”准备好。这个过程其实不复杂,但有几个关键步骤决定了后续构建的效率和成功率。

2.1 确保Docker版本与Buildx插件

首先,Buildx不是独立软件,它是Docker的一个CLI插件。所以,你的Docker版本不能太老。我建议使用Docker 20.10及以上版本,这些版本通常已经内置了Buildx,或者可以非常方便地安装。你可以通过以下命令检查:

docker --version
docker buildx version

如果第二条命令提示buildx命令未找到,那就需要安装。对于大多数Linux发行版,安装起来很简单。因为Buildx本质上是一个二进制文件,我们可以直接从Docker的GitHub仓库下载对应版本,放到Docker插件目录下。

# 创建插件目录(如果不存在)
mkdir -p ~/.docker/cli-plugins
# 下载最新的buildx二进制文件(请根据你的系统架构选择,x86_64机器通常选amd64)
wget https://github.com/docker/buildx/releases/latest/download/buildx-v0.11.2.linux-amd64
# 将其移动到插件目录并重命名
mv buildx-v0.11.2.linux-amd64 ~/.docker/cli-plugins/docker-buildx
# 添加执行权限
chmod +x ~/.docker/cli-plugins/docker-buildx

安装完成后,再运行docker buildx version,应该就能看到版本信息了。这里有个小坑我踩过:有时候即使安装好了,命令也可能不生效,这时候可以尝试重启一下终端,或者执行docker buildx install来将其注册为docker的子命令。

2.2 配置构建器(Builder)实例

这是Buildx的核心概念之一。默认情况下,Docker使用一个叫做default的构建器,它功能比较基础,不支持多架构构建。我们需要创建一个功能更强大的构建器实例。你可以把构建器实例理解为一个专门负责构建的“引擎”,这个引擎跑在容器里,具备了跨平台构建的能力。

创建和使用新构建器的命令如下:

docker buildx create --name my-multiarch-builder --use

这条命令做了两件事:--name指定了构建器的名字(我这里叫my-multiarch-builder,你可以取任何名字);--use表示创建后立即切换到使用这个构建器。执行成功后,你会看到输出一个构建器的ID。

接下来,我们需要启动这个构建器引擎:

docker buildx inspect my-multiarch-builder --bootstrap

--bootstrap参数会初始化并启动这个构建器。执行后,你可以用docker buildx ls命令查看所有构建器,带*号的就是当前正在使用的。你应该能看到你新建的构建器状态是running,并且支持的平台列表(PLATFORMS)里包含了linux/amd64(即x86_64)、linux/arm64等多种架构。如果linux/arm64不在列表里,别急,我们还需要下一步的关键配置。

2.3 安装跨架构模拟器(QEMU)

这是实现“在x86电脑上构建ARM程序”的魔法所在。光有Buildx引擎还不够,我们还需要一个“翻译官”,让x86系统能理解和运行ARM指令。这个“翻译官”就是QEMU的用户态模拟器。

安装方式非常简单,Docker社区提供了一个现成的镜像来帮我们完成所有设置:

docker run --privileged --rm tonistiigi/binfmt:latest --install all

这条命令会拉取一个特制的镜像,并以特权模式运行,它会向系统注册所有常见架构(包括arm64)的二进制格式处理程序。执行成功后,你可以检查一下:

cat /proc/sys/fs/binfmt_misc/qemu-aarch64

如果这个文件存在,并且里面有enabled的标识,那就说明ARM64模拟器已经成功安装并启用了。这个步骤通常只需要做一次,系统重启后依然有效。有了它,你的x86_64系统就能像运行本地程序一样,去解释执行ARM64的二进制文件,这在构建镜像时,对于执行Dockerfile中RUN指令(比如apt update)至关重要。

3. 编写适配跨架构的Dockerfile

环境搭好了,接下来就是重头戏:准备你的应用和Dockerfile。跨架构构建不是魔法,如果你的Dockerfile写得不够“友好”,构建过程可能会失败,或者产生效率低下的镜像。这里我分享几个从实战中总结出来的要点。

3.1 处理二进制依赖:静态链接与交叉编译

最理想的情况是你的应用是纯解释型语言(比如Python、Node.js),或者能在构建时从源码编译。但很多时候,我们不得不依赖一些预编译的二进制文件。这里有个黄金法则:尽量使用静态链接的二进制文件,或者确保你的构建过程能在目标架构上执行。

举个例子,原始文章里先交叉编译了一个Go的HelloWorld程序。这是非常标准的做法。对于Go、Rust这类编译型语言,交叉编译能力很强。比如Go,你可以在x86上轻松编译出ARM64的静态二进制文件:

CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o main main.go

CGO_ENABLED=0是关键,它禁用了CGO,从而生成纯静态的可执行文件,不依赖任何系统动态库。这样,你在Dockerfile里只需要COPY这个二进制文件进去就行,完全不需要在容器内进行编译,避免了架构兼容性问题。

如果你的应用是C/C++,并且依赖一些库,情况会复杂一些。你可能需要配置交叉编译工具链(cross-compilation toolchain),并在构建时指定正确的目标架构。一个更“Docker化”的思路是,利用多阶段构建,在一个专门针对目标架构的构建器镜像中完成编译。Buildx可以很好地支持这种模式,我们后面会讲到。

3.2 基础镜像的选择与多架构标签

FROM指令是Dockerfile的起点。对于跨架构构建,你必须使用支持多架构镜像的基础镜像。幸运的是,几乎所有主流官方镜像(如ubuntu、alpine、nginx、python)现在都提供了多架构支持。

你不需要做特别的事情,直接使用像FROM ubuntu:20.04这样的标签即可。Docker镜像仓库背后其实维护了一个“镜像清单列表”(manifest list),当你用Buildx指定--platform linux/arm64构建时,它会自动去拉取对应架构的ubuntu:20.04镜像层。

但是,我强烈建议你显式地使用带有哈希摘要(Digest)的镜像标签,或者使用更具体的版本标签,而不是latest。这能确保构建的一致性,避免因为latest标签在不同架构上指向了不同内容的镜像而引入意外问题。你可以这样写:

FROM ubuntu:20.04@sha256:ed4a42283d9943135ed87d4ee34e542f7f5ad9ecf2f244870e23122f703f91c2

这个哈希值确保了无论什么架构,拉取到的镜像层内容是完全一致的(在逻辑上)。获取这个哈希值的方法之一,是先去拉取一次该镜像。

3.3 优化RUN指令:减少架构相关操作

Dockerfile中的RUN指令会在构建过程中执行命令。由于我们使用了QEMU模拟,这些命令会在模拟的ARM64环境中运行。虽然能工作,但模拟执行的速度比原生慢很多。因此,优化原则是:尽量减少在目标架构容器内执行复杂命令的次数和复杂度。

  • 合并RUN指令:这是基础优化。将多个apt-get update && apt-get install命令合并,减少镜像层数,也减少模拟执行的上下文切换。
  • 避免在容器内编译:如前所述,尽量在构建上下文(即x86主机上)或通过多阶段构建的x86阶段完成编译,最后只COPY成品到目标镜像。
  • 谨慎使用脚本:如果RUN指令要执行复杂的Shell脚本,确保脚本中的命令是跨平台兼容的。避免使用一些x86特有的工具或参数。

一个经过优化的、跨架构友好的Dockerfile片段可能长这样:

# 第一阶段:在x86_64上构建(使用更适合构建的基础镜像,如golang)
FROM --platform=$BUILDPLATFORM golang:1.20-alpine AS builder
ARG TARGETARCH
WORKDIR /app
COPY . .
# 根据目标架构进行交叉编译
RUN GOARCH=$TARGETARCH go build -o myapp .

# 第二阶段:生成最终的精简镜像
FROM ubuntu:22.04
# 安装最少的运行时依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*
# 从构建阶段拷贝二进制文件
COPY --from=builder /app/myapp /usr/local/bin/myapp
CMD ["myapp"]

这个例子使用了Buildx提供的自动变量$BUILDPLATFORM(构建机平台)和$TARGETARCH(目标架构),非常智能。我们接下来就会详细讲解如何用Buildx命令来驱动这样的构建。

4. 掌握Buildx构建命令与缓存策略

现在,让我们把前面准备好的所有东西组合起来,用docker buildx build命令真正开始构建。这个命令的参数比传统的docker build丰富得多,理解它们能让你事半功倍。

4.1 核心构建命令详解

最基本的跨架构构建命令如下:

docker buildx build --platform linux/arm64 -t your-image:tag --load .

我们来拆解一下每个参数:

  • --platform linux/arm64:这是核心参数,指定了我们要构建的目标平台。你可以一次指定多个,比如--platform linux/amd64,linux/arm64,Buildx会并行地为所有平台构建镜像,并生成一个多架构清单列表。
  • -t your-image:tag:给构建出的镜像打标签,和普通docker build一样。
  • --load:这个参数非常重要。它告诉Buildx将构建好的镜像加载到本地Docker镜像存储中。这样你才能用docker images看到它,或者用docker run测试它。如果不加--load,构建产物默认只存在于Buildx的缓存里,或者可以通过--push直接推送到仓库。
  • .:构建上下文路径。

当你执行这个命令时,Buildx会启动构建过程。你会看到它拉取适用于linux/arm64的ubuntu基础镜像(如果缓存里没有),然后通过QEMU模拟执行Dockerfile中的指令,最终生成一个ARM64架构的镜像。通过docker inspect your-image:tag查看,Architecture字段应该是arm64。

4.2 利用缓存大幅提升构建速度

跨架构构建因为模拟执行,本来就比原生慢,如果每次都要从头开始下载基础镜像、安装依赖,那体验将非常糟糕。因此,善用缓存是提升效率的关键。Buildx提供了强大的缓存机制。

1. 本地缓存: Buildx构建器实例本身会维护缓存。这就是为什么之前我们创建并使用了专门的构建器(docker buildx create --use)。在这个构建器容器内部,下载的基础镜像和构建的中间层会被缓存下来。只要这个构建器容器不被删除,下次构建就能直接复用,无需重新下载ubuntu:20.04的ARM64版本。

2. 缓存到本地目录: 你可以将缓存导出到主机的一个目录,这样即使重建构建器容器,缓存也不会丢失。这通过--cache-to和--cache-from参数实现。

docker buildx build \
  --platform linux/arm64 \
  -t your-image:tag \
  --load \
  --cache-to type=local,dest=./cache \
  --cache-from type=local,src=./cache \
  .
  • --cache-to:将本次构建产生的缓存写入到./cache目录。
  • --cache-from:从./cache目录读取之前的缓存。 首次构建时,--cache-from可能找不到缓存,但会创建缓存目录。第二次及以后的构建,就能显著加速,特别是RUN apt-get update这种耗时操作的结果会被直接复用。

3. 使用注册表缓存: 对于团队协作或CI/CD环境,可以将缓存推送到Docker镜像仓库,供其他机器拉取使用。这需要你的镜像仓库支持OCI镜像格式的缓存(如Docker Hub、GitHub Container Registry、自建的Harbor等)。

docker buildx build \
  --platform linux/arm64 \
  -t your-registry.com/your-image:tag \
  --push \
  --cache-to type=registry,ref=your-registry.com/your-image:cache \
  --cache-from type=registry,ref=your-registry.com/your-image:cache \
  .

这个命令在构建完成后,会把镜像(--push)和构建缓存都推送到仓库。其他构建节点可以通过--cache-from拉取这些缓存,实现缓存共享,这在CI集群中非常有用。

4.3 多平台并行构建与推送

Buildx最强大的功能之一就是单命令构建多个平台的镜像,并自动创建manifest list。这样,用户无论使用什么架构的机器,docker pull your-image:tag都能自动获取到正确的镜像。

docker buildx build \
  --platform linux/amd64,linux/arm64,linux/arm/v7 \
  -t your-registry.com/your-app:multi-arch-latest \
  --push \
  .

这条命令会同时为Intel/AMD 64位、ARM 64位和ARM 32位(v7,常见于树莓派3)三种架构构建镜像。构建完成后,它会将三个独立的镜像推送到仓库,并创建一个名为multi-arch-latest的清单列表。当你推送成功后,可以在支持清单列表的仓库UI上看到这个标签关联了多个架构的镜像摘要。

5. 实战技巧与避坑指南

理论讲得再多,不如实际踩几个坑来得深刻。在这一部分,我结合自己和其他开发者的经验,分享一些能让你的跨架构构建之路更顺畅的技巧和常见问题的解决方法。

5.1 在x86主机上测试ARM64镜像

镜像构建成功了,怎么在不拥有ARM硬件的情况下验证它确实能在ARM上跑?如果你用了--load参数,镜像已经加载到本地Docker了。你可以尝试直接运行:

docker run --rm your-arm64-image:tag

如果镜像中的程序是静态链接的,并且不涉及任何特定架构的系统调用(或者这些调用被QEMU完美模拟了),那么它有可能直接运行起来。但这并不完全可靠。更严谨的测试方法是将镜像导出,传输到真实的ARM设备上运行。

# 在x86构建机上导出镜像
docker save your-arm64-image:tag -o arm64-image.tar
# 将tar文件传到你的树莓派等ARM设备上
# 在ARM设备上加载并运行
docker load -i arm64-image.tar
docker run --rm your-arm64-image:tag

这才是最终的验收测试。建议在项目初期就建立这个简单的测试流程。

5.2 处理复杂的多阶段构建

当你的应用需要复杂的编译环境时,多阶段构建是保持最终镜像精简的利器。在跨架构场景下,我们可以利用Buildx提供的自动平台变量来优化。

# syntax=docker/dockerfile:1.4
FROM --platform=$BUILDPLATFORM alpine AS downloader
ARG TARGETOS TARGETARCH
RUN apk add --no-cache curl
# 根据目标平台下载特定的工具,例如一个预编译的二进制文件
RUN curl -LO "https://example.com/tool-${TARGETOS}-${TARGETARCH}" && chmod +x tool-*

FROM ubuntu:22.04 AS runtime
COPY --from=downloader /tool-* /usr/local/bin/tool
CMD ["tool"]

注意第一行的syntax指令,它指定使用一个较新版本的Dockerfile前端解析器,以更好地支持--platform=$BUILDPLATFORM这样的变量。$BUILDPLATFORM是构建主机的平台(如linux/amd64),$TARGETOS和$TARGETARCH是Buildx根据--platform参数自动设置的目标平台信息。这样,我们可以在“下载器”阶段使用x86主机原生速度去下载针对目标架构的工具,效率远高于在模拟环境中下载。

5.3 常见问题排查

  • 构建失败,提示“exec format error”:这通常意味着Dockerfile中的某个RUN指令试图执行一个不兼容的二进制文件。检查你是否不小心将x86的编译工具或脚本拷贝到了镜像中并在ARM阶段执行。确保所有在目标架构镜像中执行的二进制文件都是为该架构编译的。
  • QEMU模拟器未生效:执行docker run --rm arm64v8/ubuntu uname -m试试。如果这个命令失败而不是返回aarch64,说明QEMU配置可能有问题。重新运行安装命令docker run --privileged --rm tonistiigi/binfmt --install all,并检查/proc/sys/fs/binfmt_misc/目录下的相关文件。
  • 构建速度极慢:除了使用缓存,检查Dockerfile。是否在ARM模拟环境中运行了apt-get build-dep或复杂的编译?尽量将这些操作移到使用--platform=$BUILDPLATFORM的阶段。另外,确保主机资源(CPU、内存)充足,QEMU模拟比较耗资源。
  • --load 不支持多平台构建:--load参数一次只能将一个架构的镜像加载到本地Docker。如果你同时构建了linux/amd64,linux/arm64,使用--load会报错。此时,你应该使用--push将多架构镜像推送到仓库,或者分别构建单个架构并使用--load。

跨架构构建的初期可能会遇到一些挑战,但一旦流程跑通,它带来的便利性是巨大的。它统一了团队的开发构建环境,简化了CI/CD流水线,让为异构硬件部署应用变得前所未有的简单。从每次构建都要找对应架构的机器,到如今在笔记本上一条命令搞定所有平台的镜像,这种体验的提升,会让你觉得之前的所有折腾都是值得的。

Docker多平台、跨平台编译打包 大多数带有Docker官方标识的镜像都提供了多架构支持。如:busybox镜像支持amd64arm32v5arm32v6arm32v7arm64v8i386ppc64le, ands390x。当你在amd64设备上运行容器时,会拉取amd64镜像。当你需要构建多平台镜像时,可以用 --platform 参数指定目标平台,但是通常情况下,你只能一次构建一个单一架构平台的镜像。如果想要一次构建多平台镜像,你需要使用,可以使用buildx插件进行配置,替换打包命令。 阅读详情

相关推荐

【Linux】Buildx构建异构docker平台镜像(x86-ARM)

Docker Buildx 是 Docker的CLI插件,来自于。自从Docker 18.06 开始这个插件直接集成到了Docker build 中,直至成文之日,它仍处于Experimental状态,所以想使用它需要显式地开启它。Buildx 是一个构建工具, 它可以帮助用户快速、高效地构建 Docker 镜像, 并支持多种平台的构建。使用 buildx, 用户可以在单个命令中构建多种架构的镜像, 例如 x86 和 ARM 架构, 而无需手动操作多个构建命令。

weixin_51924657的博客 6157

docker使用buildx构建多平台(x86,arm64)构架镜像

buildx 可用于在单个平台上实现,跨 CPU 架构编译。 buildx 实现 依赖 QEMU (开源的模拟器),支持多种cpu 架构

atzqtzq的博客 1万+

跨架构之旅:使用Docker Buildx构建多平台镜像的完整指南

本文详细介绍了如何使用Docker Buildx工具链实现跨架构镜像构建,解决x86与ARM平台兼容性问题。通过QEMU模拟、多阶段构建和统一镜像清单技术,开发者可以在单一环境中高效构建多平台镜像,适用于国产化ARM服务器迁移和混合架构K8s集群管理,显著提升开发效率和资源利用率。

weixin_27734811的博客 705

使用buildx构建多架构平台镜像

比较新的docker-ce版本默认已经集成了buildx插件。

小森饭的博客 1207

Docker Buildx 实战:在 Windows 11 x86 平台构建 ARM64 镜像的 2 种方案对比

本文详细介绍了在Windows 11 x86平台上使用Docker Buildx构建ARM64镜像的两种主流方案:QEMU仿真与多阶段交叉编译。通过对比分析两种方法的性能、适用场景和配置复杂度,帮助开发者选择最优方案,并提供了完整的Docker Desktop环境配置指南和实战案例。

478

ARM64与Docker集成:完整示例演示

通过实际案例展示ARM64平台与Docker的完整集成过程,涵盖环境配置、镜像构建与容器运行,突出arm64架构适配与跨平台部署的关键细节。

weixin_42598278的博客 739

Docker(九)Docker Buildx

如果你有私有的镜像加速器,可以基于 https://github.com/docker-practice/buildx 构建自己的 buildkit 镜像并使用它。在之前的版本中构建多种系统架构支持的 Docker 镜像,要想使用统一的名字必须使用 $ docker manifest。这个文件夹,这样我们就省去了每次获取依赖的时间,大大增加了镜像构建效率,同时也避免了生成了大量的中间层镜像。等等,当我们构建一个镜像时,往往会重复的从互联网中获取依赖包,难以缓存,大大降低了镜像的构建效率。

.正函数.的博客 2162

告别兼容性问题:如何在Mac M4上高效构建支持ARM和x86的Docker镜像

本文详细介绍了在Mac M4上使用Docker Buildx构建支持ARM和x86多架构镜像的完整实践指南。通过优化配置、智能Dockerfile编写和高效构建命令,开发者可以解决Apple Silicon设备与x86生产环境的兼容性问题,提升云原生应用的部署效率和跨平台兼容性。

fun88的博客 958

Docker Buildx实战:在x86电脑上快速构建ARM镜像(附完整命令)

本文详细介绍了如何使用Docker Buildx在x86电脑上快速构建ARM镜像。通过实战教程,涵盖环境配置、多架构构建器创建、支持跨架构构建的Dockerfile编写以及完整命令,帮助开发者高效解决跨平台容器镜像构建难题,提升开发与部署效率。

vv45678的博客 1151

信创适配实践:ARM64 架构 KylinOS 系统下 Docker 部署 Nginx 及跨架构数据迁移全攻略

架构适配:优先选择官方 ARM64 镜像,无则通过 Buildx 构建,规避指令集冲突;系统适配:关注 KylinOS 的源配置、权限模型(如 SELinux)、服务依赖;数据适配:通过校验(MD5、日志分析)保障跨环境一致性,工具化提升效率;问题适配:围绕 “日志→权限→网络” 三板斧排查,提炼信创场景的独特故障(如架构相关的镜像拉取失败)。本文以 Nginx 为切入点,覆盖容器化部署全流程与跨架构迁移,后续可拓展至等组件的信创适配,逐步构建完整的应用迁移技术栈。

H03004的博客 2183

金蝶云星空核心数据表解析与高效关联查询指南

本文深入解析金蝶云星空核心数据表结构,提供高效关联查询的实战指南。文章详细介绍了基础资料、业务单据和财务模块的关键表及其关联逻辑,重点阐述了如何利用关联表(_LK表)进行跨单据溯源,并分享了编写高性能SQL的实用技巧与避坑建议,帮助开发者、实施顾问和数据分析师快速掌握数据查询方法,提升工作效率。

weixin_29254673的博客 526

揭秘ARM与x86镜像兼容难题:如何实现高效跨架构容器化构建

解决多架构环境部署难题,详解跨架构镜像构建的核心方法与最佳实践。涵盖ARM与x86平台兼容场景,利用QEMU和BuildKit实现高效容器化构建,提升开发部署效率,值得收藏。

AlgoInk的博客 992

【RS】哨兵系列数据下载(哨兵2号Sentinel-2波段介绍、下载)

以哨兵二号为示例,分享如何下载欧空局的哨兵系列数据

Remote Sensing迷途小书童 1万+

利用Docker Buildx在M系列Mac上实现跨架构私有镜像构建

本文针对M系列Mac开发者面临的跨架构镜像构建难题,详细介绍了如何利用Docker Buildx工具实现高效的跨平台私有镜像构建。文章从实际问题出发,解析ARM与x86架构差异,提供两种实战构建方法(命令行指定与Dockerfile声明),并分享缓存加速、多架构产出等进阶技巧与CI/CD集成最佳实践,帮助开发者在Apple Silicon设备上无缝构建适用于x86服务器的Docker镜像。

cake8的博客 461

OpenClaw进阶实战(二十五):抖音企业号——私信回复与视频评论分析

本文介绍了抖音企业号自动化运营的技术方案,重点解决私信互动效率低和风控严格两大挑战。文章分析了抖音集成的三大技术壁垒(视频复杂性、风控体系、封闭API)并对比了三种技术路径的优缺点。针对不同规模的运营主体,推荐官方API+RPA混合架构或真机RPA+AI辅助的方案。 详细讲解了环境准备步骤,包括抖音Skill安装、Cookie获取和配置文件设置。核心实现部分展示了私信自动回复功能的安全合规实现,包含意图分类、优先级排序、延迟发送等防封禁机制,并提供了完整的Python代码示例。该方案通过模拟人工操作、限制日

PeterPan的博客 160

【虚幻引擎UE】UE5 可编辑动态样条线轨迹及AI跟随路径移动(含工程源码)

【虚幻引擎UE】可编辑动态样条线轨迹及AI跟随路径移动

灵境引路人 6227

利用Docker Buildx实现x86到ARM镜像的高效跨平台构建

本文详细介绍了如何利用Docker Buildx实现x86到ARM镜像的高效跨平台构建,解决嵌入式开发和混合云部署中的架构兼容问题。通过配置QEMU模拟器和多平台构建器,开发者可以在x86机器上快速构建适用于ARM平台的Docker镜像,显著提升构建效率。文章还提供了实战案例和性能优化技巧,帮助读者掌握这一关键技术。

weixin_29251567的博客 275

项目模块提取生成jar包上传到nexus供其他项目使用

项目场景: 微服务项目当中的某一个模块其他项目进行复用,资源管理搭建的有私服 nexus。 问题描述: 如果把功能用到其他项目,代码重复量太大,不想些重复的代码。 原因分析: 如果把这个模块单独提取出来进行复用,至于操作数据库的功能,使用远程调用进行数据库操作,这样就能解决相同模块重复编写的工作。量。 解决方案: 首先对模块代码进行封装提取,把一些用到的参数提取出来,以传参的形式来对参数进行传递。这个需要根据具体的情况进行代码提取,提取之后把这个模块的代码进行打包,打包可以借助开发工具进行打包(记得使用 d

lierjun 的专栏 451

从零构建ARM镜像:Docker Buildx平台选择与实践路径

掌握跨平台镜像构建难题,本文详解Docker Buildx 的平台列表及实际应用,覆盖ARM架构适配、多架构镜像生成等场景。通过Buildx实现一键构建多平台镜像,提升开发效率,值得收藏。

FuncTide的博客 904

【深度学习|多实例学习】多实例学习(Multiple Instance Learning, MIL)的起源、发展和应用,附代码(一)

【深度学习|多实例学习】多实例学习(Multiple Instance Learning, MIL)的起源、发展和应用,附代码(一)

2401_89898861的博客 1926

022、Conv-BN-SiLU 基础卷积块:构造函数参数计算,前向传播的 PyTorch 逐行实现

本文详细解析了Conv-BN-SiLU卷积块的实现细节与注意事项。作者从调试经历出发,指出bias参数冗余会导致数值不稳定,强调卷积层应设置bias=False。文章对比了SiLU与ReLU的特性差异,逐行分析了构造函数参数计算(包括自动填充、分组卷积等)和前向传播过程,特别讲解了BN层与SiLU激活的数值特性。最后分享了三个实践中的常见问题:BN的momentum设置、SiLU输出范围的影响,以及分组卷积的通道对齐要求,并提供了卷积与BN融合的推理优化技巧。全文聚焦实际工程实现中的关键细节,具有较强实操指

ai技术增长的博客 219

从x86到ARM全覆盖,Docker Buildx平台列表详解及实战应用

掌握跨平台镜像构建难题?本文详解Docker Buildx 平台列表,覆盖x86、ARM等架构,支持多架构编译与实战部署。教你配置Buildx并实现一键构建,提升CI/CD效率,值得收藏。

ByteChat的博客 966

【WorkBuddy专栏43】如何利用WorkBuddy开发一个PC网站(上)——环境选型、设计编码到部署上线

【WorkBuddy专栏43】如何利用WorkBuddy开发一个PC网站(上)——环境选型、设计编码到部署上线

AI人人懂 2271

Docker Buildx魔法:如何用x86机器为ARM设备打造高效镜像工厂

本文详细介绍了如何使用Docker Buildx在x86平台上高效构建ARM架构镜像的完整指南。通过跨架构构建技术,开发者可以显著提升开发效率、简化CI/CD流程并降低硬件成本。文章涵盖环境准备、Buildx配置优化、多平台镜像构建实战以及性能调优等核心内容,帮助开发者掌握这一关键技术。

sre5engineer的博客 769

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

揭秘Docker Buildx多架构构建:如何一次构建适配ARM/AMD/X86全平台镜像

掌握Docker镜像多架构构建buildx,轻松实现一次构建适配ARM、AMD、X86全平台。利用Buildx跨平台编译能力,开发者可在单次操作中生成多架构镜像,提升部署效率。适用于边缘计算、混合硬件集群等场景,显著简化CI/CD流程。值得收藏的实战指南,点击了解具体操作方法。

Algorift的博客 1473

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

如何用一行命令构建ARM64、AMD64通用镜像?buildx实战全曝光

掌握Docker镜像多架构构建buildx技巧,一行命令生成ARM64与AMD64通用镜像。适用于跨平台部署场景,利用Buildx实现高效、无感的多架构支持,提升CI/CD效率,值得收藏。

AlgoChat的博客 804

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: 15个SpringSecurity实战技巧解析(附代码示例)
下一篇: 【正点原子STM32实战】光敏传感器与ADC采集:从硬件连接到光线强度显示
随身带U盘
博客等级 码龄4年 30粉丝 1526原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值