4
Services and command-line programs can trivially be run using only specific libraries provided with the binary, ignoring everything already on the system. The simplest way to do this is to compile your program statically against a standard C library that does not rely on dynamically loaded modules (for e.g. resolver).
The problems arise when you wish the independent binary to interface with different services, like desktop environments and audio libraries.
Docker provides these interfaces in a standardized format. It also uses Linux kernel features like cgroups to isolate what such processes can see of the host system. "Container" is a very accurate description for this.
The intermediate model I've described, with symlinks to either system or application-provided dynamic libraries in an user-controlled directory, is not "containerized" at all. It is just a way to control library versioning and dependencies in a straightforward manner in Linux.
The most common term for this is shims.
Python virtual environments (pyenv, Python venv) consist of environment variables and a shim directory for related executables inserted in PATH before standard command directories, so that for affected commands, the symlinks (or wrapper scripts) are used instead of the executables in standard directories.
Virtual machines are simply "containers" at the kernel level, limiting what hardware a kernel can access and when.
The most useful feature for myself for desktop virtual machines is snapshotting: creating a point in time, containing everything in the virtual machine at that point, that I can return to and continue as if forking a new timeline from that point. An excellent example is creating a snapshot before installing a new application. If I decide it was a wrong move, or it caused problems, I can simply erase that timeline completely by returning to the earlier snapshot.
When one creates installable software packages, having such a VM snapshot of the base install for testing makes it trivial to check if you have your package dependencies right. If they are, the dependencies will drag in any missing libraries and services required, and everything will work.