我们托管自己的内部 Docker 注册表,并使用 Ansible 配置将构建/上传容器的 Jenkins 从属服务器。由于我们的注册表是非 SSL 的,因此我们必须添加:
"$DOCKER_OPTS --insecure-registry our.registry.com:5000"
添加到 /etc/default/docker 文件中,这样 docker 守护进程在启动时就会使用此标志运行。使用 ansible 模板并替换整个文件是否正确?或者我们应该使用 lineinfile 模块并只添加这一行?
答案1
我想说这取决于您的设置。如果您确定/etc/default/docker
所有 docker 主机上的默认文件都是相同的,并且您需要添加的只是$DOCKER_OPTS
上面指定的选项,那么就不需要lineinfile
模块了。模板甚至复制模块都可以工作,您只需将模板分别放在角色的模板目录或文件目录中即可。使用模板模块的一个好处是您可以使用该--diff
选项查看它将进行哪些更改。此外,--check
对于启用日志记录的试运行模式,跟踪所做的所有更改要容易得多。
但是如果 docker 配置文件在您的环境中有所不同,比如其中一些具有不同的 dns 服务器,我会使用lineinfile
withregex
选项。这样,您可以保留远程主机上现有的 DOCKER_OPTS,同时添加额外的不安全选项。只需确保使用backup=yes
lineinfile 选项,以防您需要从备份中恢复文件。
答案2
一般来说,使用 lineinfile 是一种反模式。“只有一行”通常会变成更多行,处理转义等问题总是很困难。