搜索
您的当前位置:首页正文

Docker Swarm 进阶:配置管理 Docker Conf

来源:二三娱乐

► 前言介绍

Docker 17.06 引入了 Swarm 服务配置,它允许你在服务的镜像或者运行的容器外部存储非敏感信息,比如配置文件。这样保证了镜像的通用性,而无需将配置文件绑定到容器或使用环境变量来配置。

  • Configs 是安装在容器的文件系统中,而不是使用 RAM 磁盘。
  • Configs 可以随时添加或删除,服务可以共享一个配置。
  • Configs 可以与 Environments 或 Labels 结合使用,以获得最大的灵活性。

提醒:Docker Configs 仅对 Swarm 服务有效,对独立的容器是无用的。如需使用,可以启动 1 个副本的服务来使用 Docker Config。

►Docker Config 基本操作

友情提示:“ 需 Swarm Manager 权限才能操作 !”

1、创建配置

用法

docker config create [参数] CONFIG file|-

参数

简写 参数 默认值 描述
-l --label 配置标签

2、配置列表

用法

docker config ls [参数]

参数

简写 参数 默认值 描述
-f --filter 按条件过滤输出
--format GO 模板转化
-q --quiet 仅展示 ID

3、配置详情

用法

docker config inspect [参数] CONFIG [CONFIG...]

参数

简写 参数 默认值 描述
-f --format GO 模板转化
--pretty 以人性化的格式打印信息

4、配置删除

用法

docker config rm CONFIG [CONFIG...]

5、Docker Compose file 示例

version: "3.3"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - my_config
      - my_other_config
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

► Swarm 对 Config 的管理

在 Swarm 中添加一个 Config 时,Docker 通过 TLS 连接把 Config 发送给 Swarm Manager。这个 Config 经过加密后,存储在 Raft 日志中,而且整个 Raft 日志会被复制到其他 Manager 中,确保 Config 的高可用性。

在新创建的或正在运行的服务添加 Config 时,Config 将作为文件安装到容器中,文件路径默认为 linux 容器中的 /<config-name>

可以在任何时候通过更新服务的方式授权其他的 Config 或移除已有的
Config 访问权。

如果节点是 Swarm Manager,或者正在运行服务任务已被授权访问这个 Config,那么这个节点才能访问这个配置。当容器任务停止运行时,共享给它的 Config 将从该容器的内存文件系统中卸载,并从节点的内存刷新。

如果一个节点运行了一个带 Config 的任务容器,在它失去与 Swarm 的连接后,这个任务容器仍然可以访问其 Config,但只有在节点重新连接到 Swarm 时才能接收更新。

为了更容易地更新或回退 Config,可以考虑在 Config Name 中添加版本号或日期。

如需更新 Stack ,可以更改 Compose file,然后重新运行 docker stack deploy -c <new-compose-file> <stack-name>。如果 Compose file 使用新的 Config ,那么 services 将开始使用这些配置。

注意:配置是不可变的,所以无法更改现有服务的文件,可以创建一个新的 Config 来使用不同的文件。

► 示例一:在服务中添加 Config

1、创建配置

echo "This is a config" | docker config create my-config -

2、创建 redis 服务,使用 my-config 配置

docker service create --name redis --config my-config redis

3、查看容器所在的节点

docker service ps redis

4、查看配置内容
docker exec $(docker ps --filter name=redis -q) cat /my-config

► 示例二:配置 Nginx 首页

1、新建一个 HTML 页面 index.html

<html>
  <head><title>Hello Docker</title></head>
  <body>
    <p>Hello Docker! This is a docker config page.</p>
  </body>
</html>

2、创建配置 homepage

docker config create homepage index.html

3、创建 Nginx 配置文件 site.conf

server {
    listen 80;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

4、创建配置 nginx_config

docker config create nginx_config site.conf

5、创建 Nginx 服务

docker service create \
     --name nginx \
     --config source=nginx_config,target=/etc/nginx/conf.d/site.conf \
     --config source=homepage,target=/usr/share/nginx/html/index.html \
     --publish published=3000,target=80 \
     nginx

6、验证 Nginx 服务配置

Top