Olá, Bruno. Tudo bom?
Quando você está aplicando margin: 0 auto; você está aplicando margin-right: auto; e margin-left: auto; e zerando a margem do margin-top e margin-bottom. Quando um elemento tem o seu display como block e um largura definida, as margens do lado direto e esquerdo com auto fazem um calculo automático para centralizar o elemento.
Se você quiser ver no detalhe como funciona esse esquema de centralizar o elemento, recomendo dar uma olhada no post abaixo que explica com detalhe como funciona:
https://medium.com/collabcode/pare-de-chutar-e-aprenda-como-funciona-o-display-block-98480c987950
Se após ler o post, ficar qualquer dúvida é só falar :-)