Embora exista uma pequena região sobreposta, o Docker e os sistemas de empacotamento Debian resolvem essencialmente dois problemas muito diferentes :
O sistema de empacotamento Debian foi criado para instalar o software em um host e atualizá-lo da maneira mais fácil possível. Ele é capaz de lidar com padrões complexos de dependência e restrição entre componentes de software, como “o software X versão A requer o software Y com a versão B ou mais recente instalado” ou “o software X nunca deve ser instalado com o software Z versão C”.
O sistema Docker foi concebido para descrever e implantar facilmente serviços, especialmente microsserviços, possivelmente em vários hosts - por exemplo, um enxame Docker ou um cluster Kubernetes.
Esses dois problemas são essencialmente ortogonais, o que significa que, dado o problema de implantação a ser resolvido, é possível usar um deles, ambos, ou talvez nenhum deles, como parte da solução. Ao usar os dois, o pacote Debian é usado na produção da imagem do Docker, e seu Dockerfile (as receitas usadas para preparar a imagem do Docker descrevendo o “sistema virtualizado” executado em um contêiner) basicamente registraria seu repositório Debian no diretório fontes do sistema de empacotamento Debian e instale seu pacote.
Com isso em mente, parece-me que o que você realmente está procurando é implementar o padrão de servidor imutável. O recente desenvolvimento das tecnologias em nuvem tornou possível atualizar o software, não usando o sistema clássico de atualização de software de um sistema de pacotes de software (como o sistema de empacotamento Debian), mas simplesmente substituindo o servidor completo de uma só vez. (Algumas pessoas fizeram isso antes deste desenvolvimento, tendo três SOs em um servidor, dois usados alternadamente para executar o dispositivo e um mini-SO dedicado à execução da substituição do dispositivo. Embora não seja excessivamente complexo, isso parece ter permanecido sempre um nicho.) Essa técnica pode ser interessante para você, porque se você é usado para atualizar o software em seu servidor usando o gerenciador de pacotes, o estado final do servidor depende do "histórico de atualização" do servidor - especialmente se ocorrerem erros no processo de atualização. Essa heterogeneidade é ruim,
Temos milhares dessas caixas no campo. Gerenciamos as dependências do pacote, o registro do processo etc. por meio de um pacote deb com diferentes graus de sucesso.
poderia se relacionar com isso. O padrão imutável do servidor limpa essa fonte de erros, basicamente destruindo a noção de "histórico de atualização" do problema.
Agora, existem várias opções para implementar o padrão imutável do servidor, duas opções populares são usar imagens, imagens do Docker ou usar "imagens de instância principal" do seu provedor de nuvem (chamadas AMIs na AWS e apenas imagens personalizadas no Google Compute Engine) . Seu caso de uso proíbe o uso de técnicas baseadas em nuvem; portanto, assumirei as imagens do Docker como a única opção qualificada. (Para fins de conclusão, certamente é possível usar outras abordagens, por exemplo, usando o Virtual Box ou uma solução de virtualização semelhante, como uma alternativa ao Docker.)
Ao usar a técnica de padrão de servidor imutável, você apresenta um novo artefato (a imagem do Docker) representando seu servidor e esse artefato também pode ser testado, e é muito fácil obter uma configuração replicando com sinceridade suas configurações de produção - além da carga de serviço.
Agora, para considerar o problema concreto que você descreveu, vamos assumir que a implementação do padrão imutável do servidor com o Docker é realmente o que você deseja. Como o sistema Docker e o sistema de empacotamento Debian são complementares e não mutuamente exclusivos (cf. introdução), ainda temos que resolver a questão se você deve preparar um pacote Debian para o seu software.
A pertinência de usar um pacote Debian para instalar seu software (na imagem do Docker ou em um host) está na complexidade do problema de versão que você precisa resolver. Se você executa ao mesmo tempo várias versões do seu software, ocasionalmente precisa fazer o downgrade e possui requisitos de versão complexos que você precisa documentar cuidadosamente, ter um pacote Debian é obrigatório. Caso contrário, essa etapa poderá ser ignorada - mas como você já se esforçou para produzir e implantar esses pacotes, não há valor real em abandonar seu trabalho. Eu sugeriria, portanto, continuar produzindo seus pacotes Debian.