Estamos empacotando e distribuindo uma aplicação web e sentimos a necessidade de mudar a implantação via deb/rpm para a abordagem baseada em contêineres, a fim de controlar as versões das dependências (como uma versão mais recente do Python em distribuições mais antigas).
Pesquisei sobre LXC/LXD e a ideia de desenvolver aplicações com estado armazenado dentro do contêiner parece atraente. No entanto, também precisamos implantar em RHEL/CentOS, e o estado dos pacotes tanto do LXC quanto do LXD parece lamentável nessas distribuições. Além disso, não parece que o LXD ou o LXC tenham um futuro no ecossistema RHEL.
Resisti um pouco ao Docker devido a vários problemas de design ou segurança que ele teve ao longo dos anos, além da mudança de paradigma para contêineres sem estado que nós, da velha guarda, precisamos abraçar.
O Docker é hoje uma plataforma confiável para implantações em produção, tanto pequenas quanto grandes, onde o tempo de atividade da aplicação é realmente importante?
E quais seriam as melhores práticas para empacotar e distribuir aplicações com Docker?
Como o Discourse é implantado exclusivamente via Docker e tenho certeza de que possui implantações de grande escala, parece ser o melhor lugar para fazer essa pergunta.
Estamos executando centenas de servidores em dezenas de data centers, tanto em bare metal quanto na nuvem, e todas as partes do aplicativo Discourse são executadas em contêineres Docker.
O Docker tem sua cota de bugs, mas para nós os benefícios superam os problemas.
Apenas uma coisa:
Não sei exatamente o que você quer dizer com isso, mas estado de longo prazo, como dados de banco de dados, geralmente é mantido em volumes que mapeiam para o host.
É sabido que os containers do Discourse funcionam sem problemas tanto em hosts com Ubuntu quanto em distribuições RHEL (Ubuntu 18.04/16.04 e CentOS 7/8)?