You can always start your own dockerfile and docker compose configurations but there are really good prebuilt solutions that can get you start right away. I took a look at top 3 in my opinion and here they are.
Docker4Drupal by Wodby https://wodby.com/docs/stacks/drupal/
Docksal by FFW https://docs.docksal.io/en/master/#what-is-docksal
and
Lando by Tandem https://docs.devwithlando.io/
I am linking to their docs as from there you will be able to learn about them, try them out and decide which one to use. All solutions also have stacks ready for other projects, like wordpress, magento, plain lamp/lemp etc
So Docker4Drupal is most basic of the 3, you basically get "docker compose" template that you can edit and spin up, you have big set of containers you can choose from so anything you need you will probably find there. Also nice addition for mac users is that they integrate docker-sync so you can have much faster file synching that native one, which is slow. Other 2 don't have this solution added. More on mac file performance and tuning can be find here https://docs.docker.com/docker-for-mac/osxfs-caching/
Docksal is more robust solution and an abstraction on docker, you will have containers and all but you will be running things with "fin" command, like "fin project start". Docs are pretty good and for each project you get a boilerplate so before spinning your containers you can set your environment variables in docksal.env file https://github.com/docksal/drupal8/blob/master/.docksal/docksal.env or make docker overrides in docksal.yml https://github.com/docksal/drupal8/blob/master/.docksal/docksal.yml so you have some different stack, by default you will get plain LAMP. Also if you need different tools and services like, redis, varnish, drupal console etc you will need to add that here.
By default you will get drush and drupal console working and drupal site installed and ready to run. Docs are good and with a day of research you should be good to go and use docksal for your work, only thing is that in docs you wont get any info on boilerplates, to get them you will need to go to main site and get github links there https://docksal.io/boilerplates, they have large variety of boilerplates for all kind of projects.
Lando is similar robust solution like Docksal. Solution is also not limited just to Drupal and has vide range of "recipes" as they call it for starting a project. Here you have similar setup as Docksal, you choose recipe and then use defaults if non overrides are provided, if there are you can easly make them as you can see here in lando.yml file
https://github.com/lando/lando/blob/80454d184e7a0108c825022edf87c19693e…
Out of the box Lando is powerful, you get drush, drupal console, db import/export, composer, php, mysql toolings, which is probably everything you need for development, it works right out of the box. You dont get full drupal installation here out of the box, so you will run the process yourself, this is more by choice as automation for that could be done, there are post start events in Lando so you could pin there command to install drupal with parameters of your choice.
Commands are also run through lando, so you will have "lando drush status" etc
Docs are good as mentioned before and this looks like a complete solution for local drupal environment based on docker.
I did have a bit more problems with setting lando up and some instability whereas docksal run more smoothly.
All solutions have part for CI and deployment but info on this will be in some other post.
In the end all solutions are good, if you are on linux :) on Mac I used them a lot, all of them and because of file synching problems on large projects I gave up and went back to DrupalVM which uses vagrant and has much less problems with file synching and speed on mac OS.