Docker 17
引擎 | Engine

存储服务配置数据(引擎) | Store service configuration data (Engine)

使用Docker Configs存储配置数据

关于配置

Docker 17.06引入了swarm服务配置,它允许您在服务映像外部或运行容器中存储非敏感信息,例如配置文件。这允许您保持图像尽可能通用,而无需将配置文件绑定到容器或使用环境变量。

Config以类似于秘密的方式运行,不同之处在于它们没有在休息时加密,并且不使用RAM磁盘直接安装到容器的文件系统中。随时可以从服务添加或删除配置,并且服务可以共享配置。您甚至可以将配置与环境变量或标签结合使用,以获得最大的灵活性。

注意:Docker配置仅适用于群集服务,而不适用于独立容器。要使用此功能,请考虑调整您的容器作为1级服务运行。

Linux和Windows服务都支持配置。

Docker如何管理配置

当您将配置添加到swarm中时,Docker会通过相互TLS连接将配置发送到swarm管理器。配置存储在加密的Raft日志中。整个Raft日志会在其他管理器中复制,从而确保配置的高可用性保证与其他群集管理数据相同。

当您授予新创建或正在运行的服务对配置的访问权时,配置将作为文件装载到容器中。容器中安装点的位置默认为/<config-name>在Linux容器中。在Windows容器中,配置都被装入C:\ProgramData\Docker\configs,符号链接被创建到所需的位置,默认为C:\<config-name>。

您可以随时更新服务以授予其访问其他配置或撤销对给定配置的访问权限。

如果节点是群管理器,或者它正在运行已被授权访问配置的服务任务,则节点只能访问配置。当容器任务停止运行时,共享给它的配置将从该容器的内存中文件系统卸载并从节点的内存刷新。

如果节点在运行可访问配置的任务容器时失去与群集的连接,则任务容器仍可访问其配置,但在节点重新连接到群集之前无法接收更新。

您可以随时添加或检查单个配置,或列出所有配置。您无法删除正在运行的服务正在使用的配置。请参阅旋转配置,以便在不中断正在运行的服务的情况下移除配置。

为了更容易地更新或回滚配置,请考虑在配置名称中添加版本号或日期。通过控制给定容器内配置的挂载点,这变得更容易。

阅读更多关于docker config命令

使用这些链接阅读有关特定命令的内容,或者继续执行有关使用配置与服务的示例。

  • docker config create

示例

本节包含说明如何使用Docker配置的示例。

注意:为简单起见,这些示例使用单引擎群和非标度服务。这些示例使用Linux容器,但Windows容器也支持配置。

简单的例子:开始使用配置

这个简单的例子显示了配置如何在几个命令中工作。对于一个真实世界的例子,继续到中间例子:使用配置与一个Nginx服务。

  • 添加一个配置到Docker。该docker config create命令读取标准输入,因为最后一个参数表示要读取配置文件的文件被设置为-。$ echo“这是一个配置”| 码头配置创建我的配置 -

简单的例子:在Windows服务中使用配置

这是一个非常简单的例子,它展示了如何在微软Windows Server 2016上使用Docker 17.06 EE上运行的Microsoft IIS服务配置,或者在Microsoft Windows 10上使用Docker for Mac 17.06上的配置。它将网页存储在配置中。

此示例假定您已安装PowerShell。

  • 将以下内容保存到一个新文件中:index.html<html> <head> <title> Hello Docker </ title> </ head> <body> <p> Hello Docker!您已经部署了一个HTML页面。</ p> </ body> </ html>

高级示例:使用配置与Nginx服务

这个例子分为两部分。第一部分是关于生成站点证书,并不直接涉及Docker配置,但是它建立了第二部分,您在其中存储和使用站点证书作为一系列秘密,并将Nginx配置作为配置使用。

生成站点证书

为您的站点生成根CA和TLS证书和密钥。对于生产站点,您可能希望使用服务Let’s Encrypt来生成TLS证书和密钥,但此示例使用命令行工具。这一步有点复杂,但仅仅是一个设置步骤,以便您可以将某些内容存储为Docker秘密。如果你想跳过这些子步骤,您可以使用我们的加密生成网站密钥和证书,命名文件site.keysite.crt,并跳过配置Nginx的容器。

  • 生成一个根密钥。$ openssl genrsa -out“root-ca.key”4096

配置Nginx容器

  • 生成一个非常基本的Nginx配置,通过HTTPS提供静态文件。TLS证书和密钥将作为Docker机密存储,以便它们可以轻松旋转。在当前目录中,site.conf使用以下内容创建一个新文件:server {listen 443 ssl; server_name localhost; ssl_certificate /run/secrets/site.crt; ssl_certificate_key /run/secrets/site.key; 位置/ {root / usr / share / nginx / html; index index.html index.htm; }}

- `/run/secrets/site.key` - `/run/secrets/site.crt` - `/etc/nginx/conf.d/site.conf`

  • 验证Nginx服务正在运行。$ docker service ls ID NAME MODE REPLICAS IMAGE zeskcec62q24 nginx replicated 1/1 nginx:latest $ docker service ps nginx NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS Nginx.1.9ls3yo9ugcls nginx:latest moby Running Running 3分钟前

您现在配置了一个Nginx服务,其配置与其映像分离。您可以使用完全相同的映像运行多个站点,但可以单独配置,而不需要根本建立自定义映像。

例如:旋转一个配置

要旋转一个配置,你首先保存一个与当前正在使用的名称不同的新配置。然后重新部署该服务,删除旧配置并在容器中的相同安装点添加新配置。此示例通过旋转site.conf配置文件构建在前一个示例上。

  • site.conf本地编辑文件。添加index.php到该index行,并保存该文件。server { listen 443 ssl; server_name localhost; ssl_certificate /run/secrets/site.crt; ssl_certificate_key /run/secrets/site.key; location / { root /usr/share/nginx/html; index index.html index.htm index.php; } }

您现在已经更新了nginx服务的配置,而无需重新构建其映像。

swarm, configuration, configs