I understand that Ansible is a Configuration Management (CM) tool for orchestrating, deploying (and continuously upgrading) software and conf via a special YAML format created for that software, and that Ansible actions can be done on the local machine via a locally executed Ansible playbook, or remotely for 1 or more machines by listing IP addresses for an Ansible playbook in an Ansible storage file and executing both the storage and associated playbook (without needing to install Ansible on the one or more remote machines).
I also understand that Operating-System-Level-Virtualization ("Containerization") software like Docker (also utilizing YAML in a unique format) allows us to "copy away" containers of "frozen; just-bake" data, from one machine to 1 or more other machines to have a pre-processed data to work with and to change minorally per specific nneds to save time of repeatitive creation of that data in the container time and again.
Sometimes when I read about either Ansible or Docker I come across mentions of Vagrant which is another software.
I understand Vagrant to be a what I can call "All-Level-Virtualization" (operating-system and possibly also some stack above it), yet I'm not sure if that's correct.
How does Vagrant is different than these two in principle (and also the term "Vagrant box" makes me to wonder if Vagrant is an actual "competitor" for Docker, is it?)