我正在努力运行基于docker的分布式任务系统,我遇到的主要症结是如何将凭据放入每个docker VM。
基本上,每个实例都需要有一个唯一的名称和一个密码/SSL 证书。然后它在启动时连接回主服务器,并开始处理任务。
创建实例相当简单,但将凭证注入每个实例的好方法是什么?普遍的共识似乎是“使用环境变量”,但使用 500 多个字符的环境变量(例如整个 SSL 证书)似乎很粗糙。
现在,我尝试打包的应用程序使用一个简单的 JSON 文件进行配置。有没有办法在运行时将文件添加到 docker 实例,或者类似的东西?也许是最后一个构建步骤采用参数定义的文件?
答案1
您可以添加 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
然后,无论您使用什么来启动工作程序,bash 脚本、ansible 等都可以在主机上选择正确的证书,但在每个启动的容器内部,情况都是相同的(证书始终在同一路径中)。
您可能希望将这些“文件卷”设为只读卷,以:ro
反映它们是静态配置,而不是容器预期或应该能够更改的内容。