我正在开发一个基于docker的分布式任务系统,我遇到的主要问题是如何获取每个docker虚拟机的凭据。
基本上,每个实例需要有一个唯一的名称和密码/ SSL证书。 然后在启动时连接回家,并开始处理任务。
制作实例相当简单,但是如何将凭据注入到每个实例中呢? 普遍的共识似乎是“使用环境variables”,但使用500多个字符的环境variables(例如整个SSL证书)看起来很粗糙。
现在,我试图打包的应用程序使用一个简单的JSON文件进行configuration。 有没有办法在运行时添加文件到docker实例,或类似的东西? 也许最后一个构build步骤需要参数化定义的文件?
您可以添加一个Docker卷,并以每个容器为基础将其指向包含所需SSL证书的主机上的文件夹。 你甚至可以制作一个“单个文件”卷。
docker run -d \ --name=worker0 \ -v "/etc/ssl/worker0.crt":/etc/ssl/private/container.crt \ -v "/etc/ssl/worker0.key":/etc/ssl/private/container.key \ myworkerimage docker run -d \ --name=worker1 \ -v "/etc/ssl/worker1.crt":/etc/ssl/private/container.crt \ -v "/etc/ssl/worker1.key":/etc/ssl/private/container.key \ myworkerimage
然后,无论你用什么来启动worker,bash脚本,ansible等都可以在主机上select正确的证书,但是在每个启动的容器内部,情况是相同的(证书总是在相同的path中)。
您可能希望使用:ro来创build这些“文件卷”只读卷,以反映它们是静态configuration,而不是容器所期望的或应该能够更改的内容。