我使用ansible推出自定义服务以及这些应用程序的模板配置文件(每个应用程序/服务器/环境不同)
我正在迁移到Docker来运行我的服务,但仍然需要利用ansible推送的配置文件。
因此,到目前为止,我允许ansible将配置模板推送到远程主机,然后将配置目录作为卷安装在容器中,以使在容器中运行的服务访问该配置数据。
这个骇人的解决方案要求三个分离的东西对齐才能正常工作(可以将配置文件推到正确的路径,将该路径正确地作为卷安装到容器的容器,以及应用程序在安装位置查找配置) -这会带来高风险,难以管理和难以更改的尖叫。
有哪些更好的方式可以将可用的模板化配置文件提供给容器?还是我需要开始寻找ansible的替代品?
一些想法:
答案 0 :(得分:1)
实际上,您现在所遵循的路径似乎是一条不错的路,我可能什么也不会改变。
由于Docker容器具有隔离的文件系统,因此容器通常使用固定的“正常”文件系统路径。例如,standard nginx image在容器空间中充斥着对/etc/nginx
的引用。将这些容器侧路径视为图像外部接口的一部分是合理的;您应该将路径/etc/nginx/nginx.conf
视为与命令行选项-g 'daemon off'
一样稳定(您不希望此路径在映像更新中发生变化)。
为避免重复文件路径,可以使用Ansible variable。如果您要启动的每个容器都有一个角色,这可能会更有用。您可以提供默认的主机端路径,并在顶级手册或命令行中覆盖它。这样一来,您就可以写出像这样的容器启动剧本
- 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特有的。 kubernetes ConfigMap对象与此最接近,并且就像您在此描述的一样,它也是将配置文件注入到容器(Pods)中的正确路径,但是本质上存在相同的问题,即需要三对要匹配的名称。再一次,没有什么比尝试在业务流程系统允许的范围内尝试使用“变量”或“常量”更好的解决方案了,希望该问题能早日得到解决。