Build a container by hand from the Linux primitives underneath it — namespaces, cgroups, chroot, veth pairs, NAT, and copy-on-write snapshots. No container runtime is installed at any point, and by the end the whole stack stops being magic.