docker-compose.yml规范的3.1版引入了对秘密的支持。
我试过这个:
version: '3.1'
services:
a:
image: tutum/hello-world
secret:
password: the_password
b:
image: tutum/hello-world$ docker-compose up返回:
Unsupported config option for services.secret: 'password'
我们如何在实践中使用秘密功能?
发布于 2017-02-10 04:32:44
你可以读正式文件中的相应部分。
要使用秘密,您需要在docker-compose.yml文件中添加两件事。首先,一个顶级的secrets:块定义了所有的秘密.然后,每个服务下的另一个secrets:块指定服务应该接收哪些机密。
例如,创建Docker将理解的两种类型的机密:外部机密和文件机密。
1.使用docker secret create创建“外部”秘密
第一件事:要对Docker使用秘密,您所处的节点必须是群集的一部分。
$ docker swarm init接下来,创建一个“外部”秘密:
$ echo "This is an external secret" | docker secret create my_external_secret -(确保包括最后的破折号,-。很容易错过。)
2.将另一个秘密写入档案
$ echo "This is a file secret." > my_file_secret.txt3.创建一个使用两个秘密的docker-compose.yml文件
现在创建了这两种类型的秘密,下面是docker-compose.yml文件,它将读取这两种秘密并将它们写入web服务:
version: '3.1'
services:
web:
image: nginxdemos/hello
secrets: # secrets block only for 'web' service
- my_external_secret
- my_file_secret
secrets: # top level secrets block
my_external_secret:
external: true
my_file_secret:
file: my_file_secret.txtDocker可以从自己的数据库(例如,用docker secret create创建的机密)或文件中读取机密。上面的例子显示了这两个例子。
4.部署测试堆栈
使用以下方法部署堆栈:
$ docker stack deploy --compose-file=docker-compose.yml secret_test这将创建web服务的一个实例,名为secret_test_web。
5.验证服务创建的容器具有两个秘密
使用docker exec -ti [container] /bin/sh验证这些秘密是否存在。
(注意:在下面的docker exec命令中,您的机器上的m2jgac...部分将有所不同。运行docker ps以查找容器名称。)
$ docker exec -ti secret_test_web.1.m2jgacogzsiaqhgq1z0yrwekd /bin/sh
# Now inside secret_test_web; secrets are contained in /run/secrets/
root@secret_test_web:~$ cd /run/secrets/
root@secret_test_web:/run/secrets$ ls
my_external_secret my_file_secret
root@secret_test_web:/run/secrets$ cat my_external_secret
This is an external secret
root@secret_test_web:/run/secrets$ cat my_file_secret
This is a file secret.如果一切顺利,我们在步骤1和步骤2中创建的两个秘密应该在部署堆栈时创建的web容器中。
发布于 2017-02-10 03:53:11
如果您有一个服务myapp和一个机密文件secrets.yml
创建一个撰写文件:
version: '3.1'
services:
myapp:
build: .
secrets:
secrets_yaml使用此命令提供秘密:
docker secret create secrets_yaml secrets.yml使用以下命令部署您的服务:
docker deploy --compose-file docker-compose.yml myappstack现在,您的应用程序可以访问/run/secrets/secrets_yaml的秘密文件。您可以在应用程序中硬编码此路径,也可以创建符号链接。
不同的问题
这个问题的答案可能是“您如何将您的秘密提供给您的停靠群群”。
最初的问题“如何使用停靠者撰写来管理秘密值”意味着坞-组合文件包含秘密值。事实并非如此。
有一个不同的问题:“您在哪里存储secrets.yml文件的规范源”。这取决于你。您可以将其存储在头脑中,打印在一张纸上,使用密码管理器,使用专用的机密应用程序/数据库。见鬼,如果git存储库是安全的,甚至可以使用它。当然,永远不要将它存储在您要用它保护的系统中:)
我推荐金库。为了保存秘密:
# create a temporary secret file
cat secrets.yml | vault write secret/myappsecrets -去找回一个秘密并把它放到你的码头群里:
vault read -field=value secret/myappsecrets | docker secret create secrets_yaml -当然,您可以使用docker集群本身作为秘密的单一来源,但是如果您的停靠集群中断,您就丢失了您的秘密。所以一定要在其他地方有后援。
--没人问的问题
第三个问题(没人问)是如何向开发人员的机器提供秘密。当存在无法在本地模拟的外部服务或无法复制的大型数据库时,可能需要该服务。
再说一次,码头与它没有任何关系(目前)。它没有指定哪些开发人员可以访问哪些秘密的访问控制列表。它也没有任何认证机制。
理想的解决办法似乎是:
docker secret create命令的长列表,并在终端中执行它们。我们还没有看到这种应用程序是否会弹出。
发布于 2017-04-04 20:52:01
还可以使用secrets对象中的file:键指定本地存储在文件中的secrets。然后你就不用自己做docker secret create了,撰写/ docker stack deploy会为你做的。
version: '3.1'
secrets:
password:
file: ./password
services:
password_consumer:
image: alpine
secrets:
- password参考资料:撰写文件第3版参考:机密
https://stackoverflow.com/questions/42139605
复制相似问题