Estou estudando o uso do Docker em um projeto de grande escala que é realmente implantado em produção. Nunca usei o docker antes, mas pelo que li, ele consiste em um novo layout chamado "Container Engine" que dá a oportunidade de implantar vários aplicativos independentes entre si e usar os recursos do host.
No caso em que estou trabalhando, as máquinas onde nosso aplicativo está implantado podem ter sistemas operacionais e arquiteturas diferentes; Windows, Linux, arm, Debian, etc... mas eles não possuem nenhuma VM funcionando, apenas o SO e as aplicações que implantamos.
Essas máquinas podem ter de 4 a 5 aplicações rodando no mesmo sistema, tendo cada uma delas dependências diferentes. Já tivemos alguns problemas com isso: por exemplo, com os descritores de arquivo, onde um aplicativo estava pegando a gravação de log de outro aplicativo, gerando logs errados e travando.
Estas aplicações comunicam-se com outras partes das máquinas através de sockets TCP/IP e utilizam gRPC, QPID e SFTP para comunicar com outros elementos do ambiente (servidores externos, bibliotecas próprias, etc...). Não sei se o uso desses protocolos complicaria a implementação do docker em nosso sistema.
Conversando com meus colegas de trabalho, eles me disseram que não vale a pena porque não traria nenhuma otimização ou benefício, mas acho que não.
Tenho lido que, ao usar contêineres, obtemos independência de sistema operacional, fazendo o aplicativo funcionar em sistemas operacionais diferentes usando uma imagem docker, independência de biblioteca e, portanto, isolamento entre aplicativos.