Linux Containers Can Be Quite Confusing
Remember that there is no such thing as a “container” primitive as defined by the Linux kernel. Instead, userland-visible kernel objects are grouped into “namespaces” of various kinds, and these, together with “cgroups” for grouping processes, are woven together to provide various kinds of higher-level “container” concepts, for example LXC/LXD, systemd-nspawn, Docker and all the rest.
The nice thing is, choosing between them is not an either/or situation, since they can coexist.