我们可以用secret管理任何敏感数据。这些敏感数据是容器在运行时需要的。同时我们又不想把这些数据保存到镜像中。
secret可以用于管理:
1、用户名和密码
2、TLS证书
3、SSH密钥
4、其他小于500KB的数据
secret只能在 swarm service 中使用,普通容器想使用secret的话, 可以将其包装成副本数为1 的service
我们这里在举一个使用secret的典型场景。
数据中心有三套swarm环境,分别用于研发、测试和生产。对于同一个应用,在不同的环境中使用不同的用户名和密码。我们可以在三个环境中分别创建secret,不过使用相同的名字,比如 username 和 password。应用部署的时候三套环境指定同样的secret名字即可。
除了敏感数据,secret当然也可以用于非敏感数据,比如配置文件,不过目前新版本的Docker 提供了config子命令来管理不需要加密的数据。config 与 secret 命令的使用方法完全一致。
secret的安全性
当在swarm中创建secret时,Docker 通过 TLS 连接将加密后的secret 发送给所有的manager节点。
secret 创建后,即使是 swarm manager 也无法查看secret的明文数据,只能通过 docker secret inspect 查看secret的一般信息。
只有当secret 被指定的service 使用时,Docker才会将解密后的secret以文件的形式mount到容器中,默认的路径为 /run/secret/<secret_name>。
当容器停止运行是,Docker会unmount secret 文件,并从节点上清除。