This! I prefer to define various docker-compose files wrapped with a makefile. Then, spin up various parts of the project with simple commands like `make api-up`
It's so easy and simple, I don't know how I ever lived without it. So much is supported, I feel like it's so easy to get everyone on a team on the same page without having to install and configure so many different things.
Funny enough, despite all of these containers, I actually don't deploy any to actually run any of the code or dependecies. It's all just for the ease and speed of development.