Olá David, sugestões sobre implementações do que você deseja:
Eu trabalho com devs que utilizam BackEnd Java / Kotlin em diferentes frentes como de microsserviços, funções AWS Lambda com runtime Java8 ... por meio do Gitlab Container Registry conseguimos implementar imagens que atendem a grupos de desenvolvedores em um repositório privado de imagens. Não chega a ser uma única imagem que atende a todos, tentar limitar o número de versões de bibliotecas, versões específicas de banco, etc ... O objetivo é que o dev tenha o ambiente pronto com todas as ferramentas necessárias o mais rápido possível.
Docker com estratégia multi-stage build entra nas pipelines para CI/CD no Gilab utilizando runners para os jobs, recursos como Jfrog Artifactory, Gradle, ferramentas de testes entram neste contexto (sempre pensando no uso de containers ao invés de instalação direta nas máquinas).
Não há uma regra escrita em pedra, discussões sobre o que atende o desenvolvimento na sua empresa com outros devs vai ajudar a construir esse ambiente, espero que algum insight relevante sobre a forma e ferramental que citei possa te auxiliar de alguma maneira ... uma última dica, você citou uso do Ubuntu, nada contra, muito pelo contrário no uso em desktop de desenvolvimento , mas construir uma imagem docker que seja útil e performática para os devs, algo como Alpine pode trazer resultados melhores.
Um abraço e bons estudos.