用Ansible而不是DockerfileconfigurationDocker容器有什么好处?

我目前正在研究提供Docker容器的两种备选方法。 容器目前由Ansiblepipe理 。

方法1:写一个Dockerfile

通常我会为我的需要编写一个Dockerfile ,构build一个图像,然后使用该图像旋转一个容器。

方法2:使用Ansible

  1. 编写一个设置SSH访问的最小的Dockerfile
  2. 从控制机器提供Ansible的容器,应用相关angular色
  3. 构buildDocker镜像

快速比较

采用第二种方法,无论Docker如何,我都可以在其他上下文中重用angular色。 例如,我可以将它们应用于EC2实例或内部托pipe的裸机服务器。

一个巨大的损失似乎是Docker“层次化”,有利于(可以说是)更强大的(Ansible模块,幂等性,通常不bash脚本)configuration经验。

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

在方法2的情况下,我从(更传统的)方法1中错过了什么? 有没有其他更好的方法来解决涉及Ansible和Docker的问题?

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


更新#1

方法3:Packer + Ansible

使用Packer与Docker构build器和Ansible provisioner(请参阅@polarisuser答案)

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

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

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