首先,尽管有时将Docker视为临时包装系统并使用它,但它实际上解决了一个完全不同的问题:Docker与运行程序有关。该泊坞窗系统可以描述的服务,可缩放的意愿和控制群的容器。Debian软件包用于安装程序,它们能够处理软件版本之间的依赖关系。 码头工人 肯定没有资格作为后裔打包系统:每个“包”只能具有一个依赖项,该系统没有“递归构建”选项,并且不支持复杂的版本约束!
可能的答案是,如果您愿意为应用程序编写Debian软件包,则还可以使用Docker部署您的应用程序。这可以通过配置脚本来实现apt_setup.sh
它会是什么样子
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
和a Dockerfile
的路线
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
(在您的特定情况下,apt_setup.sh
添加节点源存储库和一些帮助程序包(如apt-transport-https)会更加复杂。)
因此,实际上可以同时使用Debian软件包和Docker,但是…
我的直觉[…]告诉我,如果deb软件包很合适,那会更常见
这是一个正确的障碍,这使我们开始自问,为什么Docker被证明是作为临时打包系统而受欢迎的,而不是旨在成为一个打包系统。(往上看。)
给定分发中的“官方”打包系统只是在许多其他计算环境中安装软件的可能性。还有许多其他来源可用,例如特定于社区的软件包管理器(例如npm或opam),端口树(例如pkgsrc)和纯源代码分发。从这个角度来看,很容易理解Docker作为临时打包系统的成功之处:
现在,Debian软件包相对于Docker映像作为软件包系统的优势是什么?严格控制安装时的依赖性。(升级和降级的可能性也存在,但如果我们实施不可变服务器模式,则没有实际意义。)这导致了
结论
如果您仅在单一版本中部署了单个产品(这是SaaS的典型情况),则您的版本管理需求非常简单,并且将Docker用作临时软件包管理器应该没有任何硬缺点。一旦使用一个产品或多个产品的多个版本,您需要解决的版本约束问题的复杂性就会增加,并且您需要适当的工具来解决这个问题,它可能是Debian软件包或某些配置管理系统。来自不同来源的混合软件。