我们可以用 secret 管理任何敏感数据。这些敏感数据是容器在运行时需要的,同时我们不又想将这些数据保存到镜像中。
secret 可用于管理:
用户名和密码。
TLS 证书。
SSH 秘钥。
其他小于 500 KB 的数据。
secret 只能在 swarm service 中使用。普通容器想使用 secret,可以将其包装成副本数为 1 的 service。
这里我们再举一个使用 secret 的典型场景。
数据中心有三套 swarm 环境,分别用于开发、测试和生产。对于同一个应用,在不同的环境中使用不同的用户名密码。我们可以在三个环境中分别创建 secret,不过使用相同的名字,比如 <code>username</code> 和 <code>password</code>。应用部署时只需要指定 secret 名字,这样我们就可以用同一套脚本在不同的环境中部署应用了。
除了敏感数据,secret 当然也可以用于非敏感数据,比如配置文件。不过目前新版本的 Docker 提供了 config 子命令来管理不需要加密的数据。config 与 secret 命令的使用方法完全一致。
当在 swarm 中创建 secret 时,Docker 通过 TLS 连接将加密后的 secret 发送给所以的 manager 节点。
secret 创建后,即使是 swarm manager 也无法查看 secret 的明文数据,只能通过 <code>docker secret inspect</code> 查看 secret 的一般信息。
只有当 secret 被指定的 service 使用是,Docker 才会将解密后的 secret 以文件的形式 mount 到容器中,默认的路径为<code>/run/secrets/<secret_name></code>。例如在前面 MySQL 的例子中,我们可以在容器中查看 secret。
当容器停止运行,Docker 会 unmount secret,并从节点上清除。
下一节我们再通过一个更加综合例子加深对 Secret 的理解。
书籍:
1.《每天5分钟玩转Docker容器技术》
<a href="https://item.jd.com/16936307278.html" target="_blank">https://item.jd.com/16936307278.html</a>
2.《每天5分钟玩转OpenStack》
<a href="https://item.jd.com/12086376.html" target="_blank">https://item.jd.com/12086376.html</a>