Docker swarm 服务配置允许您在服务的镜像或运行的容器之外存储非敏感信息,例如配置文件。这使您可以尽可能保持图像通用,而无需将配置文件绑定到容器或使用环境变量。
Configs 的操作方式与secrets类似,不同之处在于它们在静态时没有加密,而是直接挂载到容器的文件系统中,而不使用 RAM 磁盘。可以随时从服务中添加或删除配置,并且服务可以共享一个配置。您甚至可以将配置与环境变量或标签结合使用,以获得最大的灵活性。配置值可以是通用字符串或二进制内容(最大 500 kb)。
Docker 如何管理配置
当您向 swarm 添加配置时,Docker 会通过双向 TLS 连接将配置发送到 swarm 管理器。配置存储在经过加密的 Raft 日志中。整个 Raft 日志在其他管理器之间复制,确保配置的高可用性保证与其余 swarm 管理数据相同。
当您授予新创建或正在运行的服务对配置的访问权限时,该配置将作为文件安装在容器中。容器内挂载点的位置默认/在 Linux 容器中。在 Windows 容器中,配置都被挂载C:ProgramDataDockerconfigs,符号链接被创建到所需的位置,默认为 C:.
您可以使用数字 ID 或用户或组的名称为配置设置所有权(uid和gid)。您还可以指定文件权限 ( mode)。Windows 容器将忽略这些设置。
1.如果未设置,则配置由运行容器命令的用户(通常root)和该用户的默认组(也通常root)拥有。
2.如果未设置,则配置具有全局可读权限 (mode 0444),除非umask在容器中设置了a ,在这种情况下,模式受该umask值的影响。
您可以随时更新服务以授予其访问其他配置的权限或撤销其对给定配置的访问权限。
如果节点是 swarm 管理器或者它正在运行已被授予访问配置的服务任务,则该节点只能访问配置。当容器任务停止运行时,共享给它的配置将从该容器的内存文件系统中卸载并从节点的内存中刷新。
如果节点在运行可以访问配置的任务容器时失去与 swarm 的连接,则任务容器仍然可以访问其配置,但在节点重新连接到 swarm 之前无法接收更新。
您可以随时添加或检查单个配置,或列出所有配置。您无法删除正在运行的服务正在使用的配置。有关在不中断正在运行的服务的情况下删除配置的方法,请参阅轮换配置。
要更轻松地更新或回滚配置,请考虑向配置名称添加版本号或日期。通过控制给定容器内配置的挂载点的能力,这变得更加容易。
要更新堆栈,请更改您的 Compose 文件,然后重新运行docker stack deploy -c. 如果您在该文件中使用新配置,您的服务就会开始使用它们。请记住,配置是不可变的,因此您无法更改现有服务的文件。相反,您创建一个新配置以使用不同的文件
您可以运行docker stack rm以停止应用程序并取下堆栈。这将删除由docker stack deploy具有相同堆栈名称创建的任何配置。这将删除所有配置,包括服务未引用的配置和docker service update --config-rm.