Bien qu'il existe de minuscules régions qui se chevauchent, Docker et les systèmes de conditionnement Debian résolvent essentiellement deux problèmes très différents :
Le système d'empaquetage Debian est conçu pour installer le logiciel sur un hôte et le mettre à jour aussi facilement que possible. Il est capable de gérer des modèles de dépendance et de contraintes complexes entre les composants logiciels, comme «le logiciel X version A nécessite un logiciel Y avec la version B ou une version plus récente installée» ou «le logiciel X ne doit jamais être installé avec le logiciel Z version C».
Le système Docker est conçu pour décrire et déployer facilement des services, en particulier des micro-services, éventuellement sur plusieurs hôtes - par exemple un essaim Docker ou un cluster Kubernetes.
Ces deux problèmes sont essentiellement orthogonaux, ce qui signifie qu'étant donné le problème de déploiement à résoudre, on peut utiliser l'un d'eux, les deux, ou peut-être même aucun d'entre eux, dans le cadre de la solution. Lorsque vous les utilisez tous les deux, le paquet Debian est utilisé dans la production de l'image Docker, et votre Dockerfile (les recettes utilisées pour préparer l'image Docker décrivant le «système virtualisé» exécuté dans un conteneur) enregistrerait essentiellement votre référentiel Debian dans le sources du système de conditionnement Debian et installez votre paquet.
Dans cet esprit, il me semble que ce que vous cherchez vraiment, c'est d'implémenter le modèle de serveur immuable. Le développement récent des technologies cloud a permis de mettre à niveau le logiciel non pas en utilisant le système de mise à niveau de logiciel classique à partir d'un système de progiciel (comme le système de conditionnement Debian) mais plutôt en remplaçant simplement le serveur complet à la fois. (Certaines personnes l'ont fait avant ce développement en disposant de trois OS sur un serveur, deux utilisés en alternance pour exécuter l'appliance et un mini-OS dédié au remplacement de l'appliance. Bien qu'il ne soit pas trop complexe, cela semble être toujours resté un niche.) Cette technique peut vous intéresser car si vous êtes habitué à mettre à niveau le logiciel sur votre serveur à l'aide du gestionnaire de packages, l'état final du serveur dépend de l '«historique de mise à niveau» du serveur - surtout si des erreurs se produisent dans le processus de mise à niveau. Cette hétérogénéité est mauvaise,
Nous avons des milliers de ces boîtes sur le terrain. Nous gérons les dépendances des packages, l'enregistrement des processus, etc. via un package deb avec différents degrés de succès.
pourrait se rapporter à cela. Le modèle de serveur immuable efface cette source d'erreurs en détruisant essentiellement la notion d '«historique de mise à niveau» du problème.
Il existe maintenant différentes options pour implémenter le modèle de serveur immuable, deux choix populaires consistent à utiliser des images Docker, des images ou à utiliser des «images d'instance principale» de votre fournisseur de cloud (elles sont appelées AMI dans AWS et juste des images personnalisées dans Google Compute Engine) . Votre cas d'utilisation interdit l'utilisation de techniques basées sur le cloud, je suppose donc que les images Docker sont le seul choix éligible. (Dans un souci d'achèvement, il est certainement possible d'utiliser d'autres approches, par exemple en utilisant Virtual Box ou une solution de virtualisation similaire, comme alternative à Docker.)
Lorsque vous utilisez la technique de modèle de serveur immuable, vous introduisez un nouvel artefact (l'image Docker) représentant votre serveur et cet artefact peut également être testé, et il est très facile d'obtenir une configuration reproduisant fidèlement vos paramètres de production - en dehors de la charge de service.
Maintenant, pour considérer le problème concret que vous avez décrit, supposons que l'implémentation du modèle de serveur immuable avec Docker soit réellement ce que vous voulez. Étant donné que le système Docker et le système d'empaquetage Debian sont complémentaires plutôt que mutuellement exclusifs (cf. intro), nous devons encore répondre à la question de savoir si vous devez préparer un paquet Debian pour votre logiciel.
La pertinence d'utiliser un paquet Debian pour installer votre logiciel (dans l'image Docker ou sur un hôte) réside dans la complexité du problème de versioning que vous devez résoudre. Si vous exécutez en même temps plusieurs versions de votre logiciel, avez parfois besoin de rétrograder et avez des exigences de version complexes que vous devez documenter soigneusement, avoir un paquet Debian est un must. Sinon, cette étape peut être ignorée - mais comme vous avez déjà fait un effort pour produire et déployer ces packages, il n'y a pas vraiment de valeur à abandonner votre travail. Je suggère donc de continuer à produire vos paquets Debian.