首页 > 解决方案 > 在 Docker 与 VM 上运行 Ansible

问题描述

我想为从我的 PC 到安装 ELK 的 Linux 服务器集群的 ansible-playbook 创建测试环境,考虑是在容器还是 VM 上运行它。

显然,使用 docker 应该使这个过程更容易、更快捷,但我认为这个话题除了选择 Docker 与 VM 的一般讨论之外,还有更多的深度,重点是与存储、网络和权限管理相关的 Ansible 部署。

在 Docker 容器和虚拟机上运行 Ansible 部署有哪些注意事项?

标签: dockerdeploymentansiblevirtual-machine

解决方案


我几乎从不将 Ansible 用于 Docker 容器。

Ansible 的模型更适合针对 VM。如果您有一个针对物理系统或云实例的现有 Ansible 剧本,那么 VM 将是它所期望的操作系统环境的良好镜像,但 Docker 设置将非常不同。

Ansible 通常希望与它的目标主机建立 ssh 连接,运行安装在那里的 Python,并且它的更改是相当持久的。相比之下,Docker 容器几乎从不运行 ssh 守护进程,通常不会有 Python,并且一旦容器退出,所做的任何更改都会丢失。典型的面向服务器的 Ansible playbook 会执行诸如设置服务配置和初始化脚本之类的操作,但在 Docker 系统中没有初始化并且服务配置通常被注入。

在这里,将 Docker 容器视为围绕单个进程进行打包可能会更好。您可以使用绑定挂载从主机注入配置,您可以在主机上使用 Ansible 来启动容器,但您不会使用 Ansible 来“设置”容器。如果您需要在容器中安装软件,那么使用 Docker 的本机docker build系统可以以可重现的方式完成此操作,而无需在容器启动后执行其他步骤。

“几乎从不”的一个突出例外是在容器内运行分子测试,但请注意,此设置确实具有临时和短暂更改的性质(一旦测试结束,您就想拆除容器)。


推荐阅读