美文网首页dockerDocker Swarm程序员
Docker Swarm 进阶:配置管理 Docker Conf

Docker Swarm 进阶:配置管理 Docker Conf

作者: Anoyi | 来源:发表于2018-01-19 13:44 被阅读255次

    ► 前言介绍

    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
    

    提醒:仅 version 3.3 + 可用
    详细:https://docs.docker.com/compose/compose-file/#configs

    ► 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 不能删除。想要在不中断正在运行的服务的情况下删除配置可以参考 《Rotate a config》

    为了更容易地更新或回退 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 服务配置

    相关文章

      网友评论

      • sjyu_eadd:示例一中,docker service create --name redis --config my-config redis后,是将my-config中的内容自动转化为容器的my-config文件中了?这点和k8s中的ConfigMap类似啊
        Anoyi:@sjyu_eadd 是的

      本文标题:Docker Swarm 进阶:配置管理 Docker Conf

      本文链接:https://www.haomeiwen.com/subject/qupgnxtx.html