Yeah it can seem a bit strange at first, but it lets you do awesome things. Be aware that each container is a tiny linux image that only does one thing (eg. run php, or mysql or similar). So the image is alot smaller than a full linux installation.
But we can set up each container exactly like we want without them having any influence on the others. So I can install something I need for php in the php container without it touching mysql or redis for example.
If I want to install something in a specific container, I can just rebuild that container and nothing else. So changing this is fast. And I can easily go back, but just removing the build instruction and rebuilding again.
It will also allow me to run multiple containers with the same type of data. For instance I could have 2 containers with mysql if I wanted.
It also makes it easy to try out things. Say I want to try out meilisearch. I just add a new container with that and try it out. If I dont like it, I just remove that container again. I dont need to uninstall anything
And finally a thing that I have used alot myself. When I am upgrading php versions (like 7.4 to 8.0) I add two seperate php containers to that project. One with the old version and one with the new. Now I can run tests in both at the same time, to make sure that I dont get false positives in my upgrade.
Personally I use lando to run my containers: https://sinnbeck.dev/posts/using-lando-to-run-laravel-in-docker