构建多平台的 AOT 容器镜像

💡 原文中文,约8500字,阅读约需21分钟。
📝

内容提要

dotnet-httpie最近升级,移除了对dotnet 6.0/7.0的支持,仅保留8.0和9.0,以优化AOT支持并减小Docker镜像大小。通过配置和条件编译,简化了代码,支持多平台构建,最终镜像大小减少约2/3。

🎯

关键要点

  • dotnet-httpie最近升级,移除了对dotnet 6.0/7.0的支持,仅保留8.0和9.0的支持。
  • 升级优化了AOT支持,并减小了Docker镜像的大小。
  • 通过配置和条件编译,简化了代码,支持多平台构建。
  • 最终镜像大小减少约2/3。
  • 移除了net6.0/7.0后,可以直接使用PublishAot。
  • 配置了<SatelliteResourceLanguages>以减小nuget包的大小。
  • 使用条件编译去掉了一些不必要的代码。
  • Json序列化使用Source Generator的模式替代原有写法。
  • 依赖注入方法添加DynamicallyAccessedMembers属性以保留动态依赖。
  • 使用primary constructor特性,移除了私有字段。
  • 更新后的Dockerfile支持AOT发布,镜像大小约为12MB。
  • 支持linux/amd64和linux/arm64两种架构的交叉编译。
  • 配置QEMU和docker driver以支持多平台构建。
  • 完整的build pipeline yaml可参考GitHub链接。
➡️

继续阅读