Tout d'abord, bien que Docker soit parfois vu et utilisé comme un système de packaging ad hoc , il résout en fait un problème totalement différent: Docker concerne l' exécution de programmes. Le Docker système permet de décrire les services, qui peuvent être mis à l' échelle à volonté et de contrôler des essaims de conteneurs. Les paquets Debian sont destinés à l'installation de programmes et ils sont capables de gérer les dépendances entre les versions du logiciel. Docker ne sont certainement pas considérés comme un système de packaging descendant: chaque "package" ne peut avoir qu'une seule dépendance, le système n'a pas d'option "build récursif" et ne supporte pas les contraintes de version complexes!
Une réponse possible serait que, si vous êtes prêt à écrire un paquet Debian pour votre application, vous pouvez également utiliser Docker pour déployer votre application. Ceci peut être réalisé avec un script de configuration apt_setup.sh
qui ressemblerait à
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
et un le Dockerfile
long des lignes 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
(Dans votre situation spécifique, le apt_setup.sh
serait plus compliqué, en ajoutant les référentiels nœudsource et certains packages d'assistance tels que apt-transport-https .)
Il est donc vraiment possible d'utiliser simultanément les paquets Debian et Docker …
Mon instinct […] me dit que si les paquets deb étaient un bon ajustement, ce serait plus courant
C'est un attelage correct qui nous amène à nous demander pourquoi Docker s'avère être populaire en tant que système d'emballage ad hoc , alors qu'il n'est pas destiné à en être un. (Voir au dessus.)
Le système de conditionnement «officiel» d'une distribution donnée n'est qu'une possibilité parmi tant d'autres d'installer des logiciels dans un environnement informatique. Il existe de nombreuses autres sources disponibles, comme les gestionnaires de packages spécifiques à la communauté tels que npm ou opam, les arborescences de ports comme pkgsrc et la distribution de code source standard . De ce point de vue, il est facile de comprendre le succès de Docker en tant que système d'emballage ad hoc :
Les spécifications de Docker sont très proches d'un script shell et quelle que soit la source, nous installons des logiciels en utilisant le shell.
Docker dispose d'un service «intégré» (payant) pour l'hébergement des artefacts qu'elle produit, le Docker Hub .
Maintenant, quelle est la force des paquets Debian sur les images Docker en tant que système de paquets? Le contrôle strict des dépendances lors de l'installation. (La possibilité de mise à niveau et de rétrogradation existe également mais n'a aucune importance pratique si nous implémentons le modèle de serveur immuable .)
Conclusion
Si vous n'avez qu'un seul produit déployé dans une seule version (ce qui est typique du SaaS), vos besoins de gestion de version sont très simples et l'utilisation de Docker en tant que gestionnaire de packages ad hoc ne devrait pas présenter d'inconvénients majeurs. Dès que vous travaillez avec plusieurs versions d'un même produit ou de plusieurs produits, la complexité du problème de contraintes de version que vous devez résoudre augmente et vous avez besoin d'un outil approprié pour cela, qui peut être des paquets Debian ou un système de gestion de configuration si vous êtes mélange de logiciels d'origines différentes.