使用 Ansible 而不是 Docker 文件来配置 Docker 容器有什么好处?

What are the benefits of provisioning a Docker container with Ansible instead of a Dockerfile?

我目前正在研究两种提供 Docker 容器的替代方法。容器当前 managed with Ansible.

方法一:写一个Dockerfile

通常我会根据需要写一个 Dockerfile,构建一个镜像,然后使用该镜像启动一个容器。

方法 2:使用 Ansible

  1. 写一个设置 SSH 访问的最小 Dockerfile
  2. 从控制机器为容器配置 Ansible,应用相关角色
  3. 构建 Docker 图像

快速比较

使用第二种方法,我可以在其他上下文中重用角色,而不考虑 Docker。例如,我可以将它们应用于 EC2 实例或内部托管的裸机服务器。

一大损失似乎是 Docker "layerization",支持(可以说)更强大(Ansible 模块、幂等性、通常没有 bash 脚本)配置体验。

我相信还有更多我没有考虑到的。

对于方法 2,我从(更传统的)方法 1 中遗漏了什么?对于这个涉及 Ansible 和 Docker 的问题,还有其他更好的方法吗?

PS:与问题并不严格相关,但也许值得一提:我想用 Vagrant 管理涉及这些 Docker 容器的开发环境。


更新 #1

方法 3:Packer + Ansible

将 Packer 与 Docker 构建器和 Ansible 供应器一起使用(请参阅@polarisuser 回答)

在我看来,这可以看作是方法 2 的改进。

您可能想要查看的第三个选项是使用 Packer 创建映像。我目前正在使用 Packer,我非常喜欢它。

我所做的是使用 Packer 提取我想要的 docker 图像,然后在配置步骤中,我使用 Chef 使我的图像处于所需状态。你可以用 Ansible 做同样的事情。