使用 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
- 写一个设置 SSH 访问的最小
Dockerfile
- 从控制机器为容器配置 Ansible,应用相关角色
- 构建 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 做同样的事情。
我目前正在研究两种提供 Docker 容器的替代方法。容器当前 managed with Ansible.
方法一:写一个Dockerfile
通常我会根据需要写一个 Dockerfile
,构建一个镜像,然后使用该镜像启动一个容器。
方法 2:使用 Ansible
- 写一个设置 SSH 访问的最小
Dockerfile
- 从控制机器为容器配置 Ansible,应用相关角色
- 构建 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 做同样的事情。