Docker 是否减少或减轻了对 Puppet/Chef 等人的需求?

Does Docker reduce or mitigate the need for Puppet/Chef et al?

我对这些技术都不熟悉(真的很尴尬),但在我目前的工作中,公司急需自动化。

因此,当我开始阅读 Puppet、Chef 和 PowerShell DSC 时,我记得 Docker 和容器化即将到来 Windows。

Docker 是不需要这些工具,还是它们一起工作?

我了解到Docker在OS中使用了虚拟化技术,所以我觉得Docker解决了不同的问题,仍然需要配置工具,但我'没有一定的实用知识。

Docker 是不需要这些工具,还是它们一起工作?

它们协同工作:供应和容器化解决不同的问题,您实际上可以使用供应工具供应 docker 容器本身。
例如参见“Docker: Using Puppet

Puppet 和 Chef 是配置管理工具,而 Docker 是 LXC 等虚拟化工具。

通常您会使用 Chef 或 puppet 来管理 Docker 容器。例如看看 Chef docs.

根据@ptierno 评论进行编辑。

Chef 和 Puppet 等工具对于配置很重要,但它们确实有一个弱点,Docker 有助于弥补这一弱点。它们并不总是完全幂等的(尽管有炒作)。换句话说,运行在同一台虚拟机上两次使用 Chef 可能会导致该机器发生意外且难以发现的更改,并且您需要恢复备份以达到已知的良好状态。

相比之下,Docker 部署涉及构建一个全新的映像并将其替换为旧映像。回滚涉及简单地取消交换它们并比较它们以诊断新图像中的问题。

请注意,您仍然可以很好地使用 Chef 来构建 Docker 容器。但你很可能不会。由于容器应该以特定方式 运行 只有一个进程,我发现一系列简单的 shell 命令比 Chef 带来的开销更可取。

简而言之,您不需要像 Chef 或 Puppet 这样的东西。当然你可以使用if like to but it is not required.

如果您以容器化的方式构建系统,那么您只需要很小的OS,例如 CoreOS 或 Atomic。

因此,如果需要,您只需通过 Cloud-Config 配置您的 VM,并使用云配置或 Docker cli 本身部署您的容器。这个想法是你的机器应该有一个静态,它们可以在你想要新的时候创建,在你不需要的时候销毁。

还有其他工具可以帮助 Docker 编排,这又是另外一个故事了。

SwarmKubernetesMesosphere 等工具。 docker-machine 对开发目的也很有帮助。 (也可能部署)。

这是核心OS示例: https://coreos.com/os/docs/latest/cloud-config.html

资源:我在不同应用程序的生产中这样做。

更新:

顺便说一句,Docker不仅仅是一种可视化技术。它进行某种容器化(您也可以称之为虚拟化),而这只是 Docker 可以做的一小部分。 Docker 可以配置、构建、发布和 运行 应用程序,同时消除其对主机的依赖性。这就是您不需要那些经典配置工具的原因。

Docker 是三件事:运行 进程的一种很酷的方式,一个体面的基于映像的部署系统,以及一个平庸的系统映像生成器。

第一个与配置管理无关,因为这些工具不参与 运行进程,至少不直接参与。第二个通过在构建映像时提前执行来代替生产中的一些配置管理。对于诸如服务发现和机密之类的东西,仍然经常需要最后一英里的配置,但这可以通过较轻的工具来处理,例如 consul-templates 或 confd。最后一点是摩擦所在。 docker build 很简单,容易上手,但对复杂情况几乎没有帮助。您最多只能在 dockerfile 之间获得一个单一的继承树,这使得多轴矩阵构建 ({app1 app2 app3} x {prod qa dev}) 之类的东西比它可能的更难。为其他组构建可组合的抽象以供使用也很困难,尽管这也并非不可能。使用 Packer 之类的工具来驱动镜像构建有时可以生成更简单的代码,并且支持全套 CAPS(Chef、Ansible、Puppet、Salt)工具。这主要针对您将 Docker 图像视为微型 VM 的用例,我希望更少的人会这样做,但这是事实,所以我们来了。