To name a few off the top of my head - XAMPP, WAMP, EasyPHP, Vagrant, QEMU, WSL, VirtualBox (headless and ui), Devilbox, Vanilla Docker, (Homestead, Sail, Valet, Laragon)
My favorites where #3 Laragon, #2 Devilbox and number one nowadays is Lando.
Lando [1] is the best of all worlds as I have projects running node, c#, java and php and while I haven't needed to I can use or drop to raw docker files if I need to. Everyone I have introduced to it ended up loving it for ease of use and convenience. It comes with about everything you need and you can craft your own recipes and access them as needed. In one laravel project I have meilisearch running [2] and more. I could go on and on about this tool but it makes the dev process so much easier where I can focus on problem solving and not wrangling with commands and tools.
[1] - https://lando.dev/ [2] - https://usa.adaptagency.com/news-knowledge/meilisearch-and-l...
[0] https://1.bp.blogspot.com/-LRsqmuaX9Q0/XhhZfDGmkYI/AAAAAAAAA...
Actually used XAMPP just a few years ago, for some quick and dirty PHP development, before eventually moving over to containerizing everything I needed for that project. It's still around and usable: https://www.apachefriends.org/index.html
Either way, nowadays I basically run all of my "business" applications in containers, because that's the lowest common denominator for isolated, scalable and relatively easily manageable environments that's not going anywhere (OCI seems too widespread now, even if something like Podman might displace Docker in particular somewhat).
That said, there's also something nice to be said about things running with fewer abstractions along the way locally (debugging can be easier in some tech stacks that way, instead of figuring out how to do remote debugging, same for other instrumentation like seeing all of the application threads/memory/SQL queries etc.), or a set of highly focused tools for a particular tech stack.
I wrote a tool to coordinate Vagrant-LXC projects. We had over 20 Microservices that were deployed with Chef or ansible and I used a python script to coordinate the deployment of them locally.
I began writing an open source version on GitHub
https://GitHub.com/samsquire/platform-up
The idea is it detects if it needs to redeploy based on file changes so it's fast to run if there are few changes. You can also deploy your entire infrastructure locally with this approach.
I even had load balancing with haproxy working properly with it at my employer.
TBH I miss Vagrant. I wish there were a Dockerfile, but for VMs.
I'm currently working on a wrapper for QEMU that has docker-like semantics for pull/run/start/stop/exec/etc, but it will pull docker images from docker registries and convert them to qcow2 for you and run them in QEMU. It works on Linux and Windows and should run on MacOS and BSD eventually.
[0]: https://github.com/ForAllSecure/rootfs_builder
EDIT: Also see https://iximiuz.com/en/posts/from-docker-container-to-bootab...
Provisioner scripts can effectively be broken down from the Dockerfile RUN layers as Bash or Powershell scripts. Then output as a vagrant box or hypervisor VM export VM of choice. For exposing ports, just run an iptables or powershell New-NetFirewallRule.
Whilst you can't get volume mounts can use the file provisioner to embed local files on build.
Then import it and create a default snapshot. Want it back to its original state? Revert snapshot and done!