Docker 通过ansible模板化让容器使用配置文件构建
我使用ansible推出定制服务,以及这些应用程序的模板输出配置文件(每个应用程序/服务器/环境不同) 我将转到Docker来运行我的服务,但仍然需要利用ansible推送的配置文件 现在,我允许ansible将配置模板推送到远程主机,然后将配置目录作为卷装载到容器中,以使容器中运行的服务能够访问该配置数据 这个骇人的解决方案需要三个独立的东西来协调工作(ansible将配置文件推到正确的路径,容器以卷的形式正确装载该路径,应用程序在装载位置找到配置)——这意味着高风险、难以管理和难以更改 有哪些更好的方法可以使ansible模板化配置文件可用于容器?还是我需要开始寻找ansible的替代品 一些想法:Docker 通过ansible模板化让容器使用配置文件构建,docker,ansible,kubernetes,Docker,Ansible,Kubernetes,我使用ansible推出定制服务,以及这些应用程序的模板输出配置文件(每个应用程序/服务器/环境不同) 我将转到Docker来运行我的服务,但仍然需要利用ansible推送的配置文件 现在,我允许ansible将配置模板推送到远程主机,然后将配置目录作为卷装载到容器中,以使容器中运行的服务能够访问该配置数据 这个骇人的解决方案需要三个独立的东西来协调工作(ansible将配置文件推到正确的路径,容器以卷的形式正确装载该路径,应用程序在装载位置找到配置)——这意味着高风险、难以管理和难以更改 有哪
- 我在dev/qa/prod中有很多不同的vm和应用程序集 环境,所以我不想在 图像,否则我会得到数百张图像
- 我可以在容器运行时加载配置,但是我如何才能在某种程度上仍然利用ansibles模板化,而不是从容器本身运行ansible playbook(不知为什么?)
/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)的正确路径,但它基本上存在相同的问题,即需要三对名称来匹配。同样,没有比尝试在编排系统允许的范围内使用“变量”或“常量”更好的解决方案了,希望问题尽快解决