尽管存在一些微小的重叠区域,但Docker和Debian打包系统本质上解决了两个非常不同的问题:
这两个问题本质上是正交的,这意味着在解决要解决的部署问题的情况下,可以将其中一个(或者两个都使用,甚至可能都不使用)作为解决方案的一部分。当同时使用它们时,Debian软件包将用于生成Docker映像,并且您的Dockerfile(用于准备Docker映像的配方描述了在容器中运行的“虚拟化系统”)将在实质上将您的Debian存储库注册到Debian打包系统的源文件并安装您的软件包。
考虑到这一点,在我看来,您真正想要的是实现不可变服务器模式。云技术的最新发展使升级软件成为可能,而不是通过使用软件包系统(例如Debian打包系统)中的经典软件升级系统,而是通过一次更换整个服务器来进行。(在开发此产品之前,有人通过在服务器上安装三个OS,两个用于交替运行该设备的OS和一个专用于执行设备更换的微型OS来进行此操作。虽然并不太复杂,但这似乎始终是这种技术可能对您很感兴趣,因为如果您习惯使用软件包管理器来升级服务器上的软件,则服务器的最终状态取决于服务器的“升级历史记录”,尤其是如果升级过程。这种异质性不好
我们在现场有成千上万个这样的盒子。我们通过deb软件包管理软件包的依赖关系,过程注册等,并获得不同程度的成功。
可能与此有关。不变的服务器模式通过从问题中破坏“升级历史记录”的概念来消除这种错误源。
现在,有很多选项可以实现不变的服务器模式,两个流行的选择是使用Docker映像,映像或使用云提供商的“主实例映像”(AWS中的AMI,在Google Compute Engine中只是自定义映像) 。您的用例禁止使用基于云的技术,因此,我将Docker映像视为唯一合格的选择。(为了完整起见,当然可以使用其他方法来替代Docker,例如使用Virtual Box或类似的虚拟化解决方案。)
使用不可变服务器模式技术时,您将引入一个代表服务器的新工件(Docker映像),并且也可以对该工件进行测试,并且很容易获得可以真实复制您的生产设置的设置(除了服务负载)。
现在考虑您描述的具体问题,让我们假设实际上需要使用Docker实现不可变服务器模式。由于Docker系统和Debian打包系统是互补的,而不是相互排斥的(请参阅介绍),所以我们仍然必须解决是否应该为软件准备Debian软件包的问题。
使用Debian软件包(在Docker映像中或在主机上)安装软件的相关性在于必须解决的版本控制问题的复杂性。如果您同时运行多个软件版本,则有时需要降级,并且需要仔细记录复杂的版本要求,因此必须拥有Debian软件包。否则,可以跳过此步骤–但由于您已经在努力生产和部署这些软件包,因此放弃工作没有真正的价值。因此,我建议继续生产您的Debian软件包。