I have a tendency to attract the most obscure Docker, Podman, Rancher, Buildah, Boxes, and VirtualBox bugs. I fully expected Apptainer to fail. The only hiccup was Xwayland, and then it was smooth sailing—with ethernet, USB, and graphical applications having full access to networked and local ROS 2 hardware.
For me? Apptainer works.
Also, as OP mentioned Yocto: The latest OS build for a sensor I made targeted a multi-core Cortex-A using Yocto. I started from the chipmaker’s working demo build. There were a few concepts to learn (mostly, how layers are supposed to influence each other while only changing the layers you control, and how to use devtool to fix two bugs in the chipmaker’s realtime kernel patches) but nothing more ridiculous to learn/understand than CMake. It was easy to add ROS 2: Add the meta-ros layers (common + ROS 2 + Humble), set a few variables and append image features in local.conf (e.g. just " ros-core" and an overlay of prebuilt nodes), and then it builds. (Notably, it builds after 240 gigabytes of download cache, sstate, tmp/work output, a backup of the pristine SDK/BSP. There was also a problem with SRC_URI in xtensor-stack/xtl but Stack Overflow or Github helped resolve this in just a few minutes, and I think it’s since been resolved but I’ve already pinned the working build.) The target image itself is smaller and faster than Debian. I wouldn’t lump it in with containerization, but Yocto is also “acceptable” for me, for now.