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