docker - 在 Docker 与 VM 上运行 Ansible
问题描述
我想为从我的 PC 到安装 ELK 的 Linux 服务器集群的 ansible-playbook 创建测试环境,考虑是在容器还是 VM 上运行它。
显然,使用 docker 应该使这个过程更容易、更快捷,但我认为这个话题除了选择 Docker 与 VM 的一般讨论之外,还有更多的深度,重点是与存储、网络和权限管理相关的 Ansible 部署。
在 Docker 容器和虚拟机上运行 Ansible 部署有哪些注意事项?
解决方案
我几乎从不将 Ansible 用于 Docker 容器。
Ansible 的模型更适合针对 VM。如果您有一个针对物理系统或云实例的现有 Ansible 剧本,那么 VM 将是它所期望的操作系统环境的良好镜像,但 Docker 设置将非常不同。
Ansible 通常希望与它的目标主机建立 ssh 连接,运行安装在那里的 Python,并且它的更改是相当持久的。相比之下,Docker 容器几乎从不运行 ssh 守护进程,通常不会有 Python,并且一旦容器退出,所做的任何更改都会丢失。典型的面向服务器的 Ansible playbook 会执行诸如设置服务配置和初始化脚本之类的操作,但在 Docker 系统中没有初始化并且服务配置通常被注入。
在这里,将 Docker 容器视为围绕单个进程进行打包可能会更好。您可以使用绑定挂载从主机注入配置,您可以在主机上使用 Ansible 来启动容器,但您不会使用 Ansible 来“设置”容器。如果您需要在容器中安装软件,那么使用 Docker 的本机docker build
系统可以以可重现的方式完成此操作,而无需在容器启动后执行其他步骤。
“几乎从不”的一个突出例外是在容器内运行分子测试,但请注意,此设置确实具有临时和短暂更改的性质(一旦测试结束,您就想拆除容器)。
推荐阅读
- java - LifecycleExecutionException: maven-archetype-plugin:3.0.1 当前项目没有构建原型
- python - 线程之间的变量交换
- python - 在熊猫中过滤Groupby和Sum?
- ios - 通过 segue 传递错误的数据
- postgresql - 如何在 Postgresql 数据库中获取 LAST_DDL_TIME 信息(如在 Oracle dba_all_objects 中)
- .net - Visual Studio Mac 2017 - 检测到包降级:Microsoft.AspNetCore.App 2.1.3 到 2.1.1
- css - 纯css创建双边框按钮
- animation - Flutter Animtion 崩溃并在通知侦听器的 AnimationController 错误时引发以下断言
- javascript - 如何创建一个新的 Highcharts 实例?
- c# - Caliburn.micro、WPF 和两个组合框