Primeiro, embora o Docker às vezes seja visto e usado como um sistema de empacotamento ad hoc , ele realmente resolve um problema totalmente diferente: o Docker trata da execução de programas. O sistema Docker permite descrever serviços que podem ser dimensionados à vontade e controlar enxames de contêineres. Os pacotes Debian são para instalação de programas e são capazes de lidar com dependências entre versões de software. Docker certamente não se qualifica como um sistema de empacotamento descendente: cada "pacote" pode ter apenas uma dependência, o sistema não possui a opção "compilação recursiva" e não suporta restrições de versão complexas!
Uma resposta possível seria que, se você estiver disposto a escrever um pacote Debian para seu aplicativo, também poderá usar o Docker para implantar seu aplicativo. Isso pode ser alcançado com um script de configuração apt_setup.sh
que se pareceria com
apt-key add - <<EOF
-----BEGIN PGP PUBLIC KEY BLOCK-----
<YOUR RELEASE OFFICER PGP KEY GOES HERE>
EOF
cat >> /etc/apt/sources.list <<EOF
deb https://my.organisation.org/repo debian-jessie main
apt-get update -y
apt-get upgrade -y
EOF
e um Dockerfile
ao longo das linhas de
ADD apt_setup.sh /root
RUN sh -ex /root/apt_setup.sh && rm /root/apt_setup.sh
RUN apt-get install -y my-node-js-package
(Na sua situação específica, apt_setup.sh
seria mais complicado adicionar os repositórios nodesource e alguns pacotes auxiliares, como apt-transport-https .)
Portanto, é realmente possível usar pacotes Debian e Docker simultaneamente, no entanto…
Meu instinto […] está me dizendo que, se os pacotes deb se encaixassem, seria mais comum
Esse é um problema correto que nos leva a nos perguntar por que o Docker se mostra popular como um sistema de empacotamento ad hoc , embora não pretenda ser um. (Veja acima.)
O sistema de empacotamento "oficial" de uma determinada distribuição é apenas uma possibilidade entre muitos outros de instalar software em algum ambiente de computação. Existem muitas outras fontes disponíveis, como gerenciadores de pacotes específicos da comunidade, como npm ou opam, árvores de portas como pkgsrc e distribuição simples de código-fonte. Nessa perspectiva, é fácil entender o sucesso do Docker como um sistema de empacotamento ad hoc :
As especificações do Docker estão muito próximas de um script de shell e, independentemente da origem, instalamos o software usando o shell.
O Docker possui um serviço " interno " (pago) para hospedar artefatos produzidos, o Docker Hub .
Agora, qual é a força dos pacotes Debian sobre as imagens do Docker como um sistema de pacotes? O controle rígido sobre as dependências na instalação. (A possibilidade de atualizar e fazer o downgrade também existe, mas não tem importância prática se estivermos implementando o padrão de servidor imutável .) Isso leva ao
Conclusão
Se você tiver apenas um único produto implantado em uma única versão (típica do SaaS), suas necessidades de gerenciamento de versões serão muito simples e o uso do Docker como um gerenciador de pacotes ad hoc não deve ter desvantagens. Assim que você trabalha com várias versões de um único produto ou vários produtos, a complexidade do problema de restrições de versão que você precisa resolver aumenta e você precisa de uma ferramenta apropriada para isso, que pode ser pacotes Debian ou algum sistema de gerenciamento de configuração, se você estiver software de mixagem de diferentes origens.