Docker 通过ansible模板化让容器使用配置文件构建

Docker 通过ansible模板化让容器使用配置文件构建,docker,ansible,kubernetes,Docker,Ansible,Kubernetes,我使用ansible推出定制服务,以及这些应用程序的模板输出配置文件(每个应用程序/服务器/环境不同) 我将转到Docker来运行我的服务,但仍然需要利用ansible推送的配置文件 现在,我允许ansible将配置模板推送到远程主机,然后将配置目录作为卷装载到容器中,以使容器中运行的服务能够访问该配置数据 这个骇人的解决方案需要三个独立的东西来协调工作(ansible将配置文件推到正确的路径,容器以卷的形式正确装载该路径,应用程序在装载位置找到配置)——这意味着高风险、难以管理和难以更改 有哪

我使用ansible推出定制服务,以及这些应用程序的模板输出配置文件(每个应用程序/服务器/环境不同)

我将转到Docker来运行我的服务,但仍然需要利用ansible推送的配置文件

现在,我允许ansible将配置模板推送到远程主机,然后将配置目录作为卷装载到容器中,以使容器中运行的服务能够访问该配置数据

这个骇人的解决方案需要三个独立的东西来协调工作(ansible将配置文件推到正确的路径,容器以卷的形式正确装载该路径,应用程序在装载位置找到配置)——这意味着高风险、难以管理和难以更改

有哪些更好的方法可以使ansible模板化配置文件可用于容器?还是我需要开始寻找ansible的替代品

一些想法:

  • 我在dev/qa/prod中有很多不同的vm和应用程序集 环境,所以我不想在 图像,否则我会得到数百张图像
  • 我可以在容器运行时加载配置,但是我如何才能在某种程度上仍然利用ansibles模板化,而不是从容器本身运行ansible playbook(不知为什么?)

事实上,你现在所走的道路看起来不错,我可能不会改变任何事情

因为Docker容器有一个独立的文件系统,所以容器通常使用固定的“正常”文件系统路径。例如,容器空间中到处都是对
/etc/nginx
的引用。将这些容器侧路径视为图像外部接口的一部分是合理的;您应该将路径
/etc/nginx/nginx.conf
视为与命令行选项
-g'daemon off'
一样稳定(您不希望此路径在图像更新过程中发生更改)

为了避免重复文件路径,可以使用Ansible。如果您对要启动的每个容器都有一个角色,那么这可能会更有用。您可以提供默认的主机端路径,并在顶级playbook或命令行中覆盖它。这将让您编写一个容器启动剧本,如

- name: Copy nginx.conf
  template:
    src: nginx.conf.j2
    dest: "{{ nginx_config_path }}/nginx.conf"

- name: Launch nginx
  docker_container:
    name: nginx
    image: nginx
    volumes:
      - "{{ nginx_config_path }}:/etc/nginx"
注意,这个问题并不是Ansible所独有的。ConfigMap对象与此最为相似,正如您在这里所描述的,它也是将配置文件注入容器(pod)的正确路径,但它基本上存在相同的问题,即需要三对名称来匹配。同样,没有比尝试在编排系统允许的范围内使用“变量”或“常量”更好的解决方案了,希望问题尽快解决