一千萬個為什麽

搜索

為什麽不使用配置管理工具而不是Dockerfile?



我對Docker和配置管理工具很新穎。

起初,我開始編寫bash腳本來為我的開發機器配置我的Vagrant框,但現在我已經轉而使用Chef,以便我可以使用相同的源來配置開發和生產環境,以嘗試使它們相似盡可能。

自從我開始使用Chef以來,我開始享受DRY方面的優勢,無需復制和粘貼項目之間的shell腳本行,使用一個整合源配置運行各種linux發行版的計算機的功能,以及方便使用社區提供的食譜。

現在我已經使用Chef來配置我的虛擬機了,感覺就像在我將RUN命令加上shell命令後添加到Dockerfile來實現可以通過運行Chef配方時可以實現的那樣向後退一步。

我搜索了一下,並沒有發現任何東西(但也許我錯過了它),但它看起來並不像使用Chef食譜來構建Docker容器的簡單方法。這是為什麽?

我知道容器是不可改變的,配置管理工具通常用於在整個生命周期內重新配置機器,但是如果在容器的初始構建過程中使用它們,它們是否仍然提供很多好處?

轉載註明原文: 為什麽不使用配置管理工具而不是Dockerfile?

一共有 2 個回答:

您需要的工具是 Packer ,使用Docker作為“構建者”和廚師“提供者”。然後,您可以將生成的圖像添加到您的倉庫,並重復使用,無需再次打包,直到您的配方更改。

這些策略與彼此無關。

Containers (like Docker) are a methodology for deploying and isolating applications. Containers are well liked because they're transportable. They can be developed on and previewed locally in most cases, so putting applications in them makes sense.

As for why Docker uses shell scripting: A docker image is literally a linux container image. It's a linux operating system and the point of that container to be as lightweight and efficient as possible. If you started adding Chef, Ruby, Erlang, and all the other libraries required to have Chef as a provisioner on a Dockerfile you'd be eliminating the point of using containers.

Configuration Management is for provisioning a compute node. Your configuration end state is usually reflected in code and has a central server for maintaining state. Tools like vagrant allow you to use chef to configure Vagrant machines, largely out of convenience for developers. While you can use most of these tools in a local-only mode, the maintenance of them becomes quite burdensome. Those central servers are for things like automatically sorting out versioning and dependency management.

Bash本質上不是退後一步。例如,許多組織構建完全不可變的圖像管道使用Bash構建它們的圖像。這確保了工程師的穩定性和可預測性以及通用語言(許多工程師可能來自不同的配置管理背景)。

Immutable vs Config Management. Immutable infrastructure does not change and must be entirely replaced in order to be updated. Config Management implies that the state of a machine is maintained by an agent or foreign connection (like with Ansible).

Docker容器本質上是不可變的。您不會持續保存數據,並且必須進行滾動以便更新。