暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker swarm(8)swarm管理配置信息

运维笔记本 2020-01-24
3191

管理配置信息

启动镜像的时候指定配置文件,增加镜像的通用性。

在 Swarm 集群中管理配置数据

在动态的、大规模的分布式集群上,管理和分发配置文件也是很重要的工作。传统的配置文件分发方式(如配置文件放入镜像中,设置环境变量,volume 动态挂载等)都降低了镜像的通用性。

在 Docker 17.06 以上版本中,Docker 新增了 docker config 子命令来管理集群中的配置信息,以后你无需将配置文件放入镜像或挂载到容器中就可实现对服务的配置。

注意:config 仅能在 Swarm 集群中使用。

演示两个实例

一、在 Swarm 集群中部署 redis 服务

创建 config

新建 redis.conf 文件

    port 6380

    此项配置 Redis 监听 6380 端口

    我们使用 docker config create
    命令创建 config

      $ docker config create redis.conf redis.conf

      查看 config

      使用 docker config ls
      命令来查看 config

        $ docker config ls


        ID NAME CREATED UPDATED
        yod8fx8iiqtoo84jgwadp86yk redis.conf 4 seconds ago 4 seconds ago

        创建 redis 服务

          $ docker service create \
          --name redis \
          # --config source=redis.conf,target=/etc/redis.conf \
          --config redis.conf \
          -p 6379:6380 \
          redis:latest \
          redis-server redis.conf

          如果你没有在 target 中显式的指定路径时,默认的 redis.conf 以 tmpfs 文件系统挂载到容器的 config.conf。

          经过测试,redis 可以正常使用。

          以前我们通过监听主机目录来配置 Redis,就需要在集群的每个节点放置该文件,如果采用 docker config 来管理服务的配置信息,我们只需在集群中的管理节点创建 config,当部署服务时,集群会自动的将配置文件分发到运行服务的各个节点中,大大降低了配置信息的管理和分发难度。

          二、在 Swarm 集群中部署 Nginx 服务

          1、管理节点:宿主级当前目录创建Nginx配置文件

          vi site.conf

            server {
            listen 80;
            server_name localhost;
            location {
            root usr/share/nginx/html;
            index index.html index.htm;
            }
            }

            2、管理节点:将site.conf保存到docker配置存储中

            docker config create docker
            配置文件名 本地配置文件

              root@manager1:~# docker config create site.conf site.conf
              qv99ymlskm3zps0krruitvh1l
              root@manager1:~# docker config ls
              ID NAME CREATED UPDATED
              qv99ymlskm3zps0krruitvh1l site.conf 6 seconds ago 6 seconds ago
              root@manager1:~# docker config inspect site.conf
              [
              {
              "ID": "qv99ymlskm3zps0krruitvh1l",
              "Version": {
              "Index": 3359
              },
              "CreatedAt": "2020-01-24T02:50:00.039431899Z",
              "UpdatedAt": "2020-01-24T02:50:00.039431899Z",
              "Spec": {
              "Name": "site.conf",
              "Labels": {},
              "Data": "c2VydmVyIHsKbGlzdGVuIDgwOwpzZXJ2ZXJfbmFtZSBsb2NhbGhvc3Q7CmxvY2F0aW9uIC8gewpyb290IC91c3Ivc2hhcmUvbmdpbngvaHRtbDsKaW5kZXggaW5kZXguaHRtbCBpbmRleC5odG07Cn0KfQo="
              }
              }
              ]


              3、管理节点:创建一个Nginx并应用这个配置

                docker service create \
                --name test_nginx \
                --replicas 2 \
                --config source=site.conf,target=/etc/nginx/conf.d/site.conf \
                --publish 8080:80 \
                nginx:latest
                  创建服务
                  docker service create \
                  # 服务名
                  --name nginx \
                  #添加配置文件,source=docker配置文件,target=配置文件路径
                  --config source=site.conf,target=/etc/nginx/conf.d/site.conf \
                  # 暴露端口
                  --publish 8080:80 \
                  # 使用镜像
                  nginx:latest

                  4、工作节点:切换到容器查看配置文件

                    root@manager1:~# docker service ls
                    ID NAME MODE REPLICAS IMAGE PORTS
                    pp264mpv82x8 test_nginx replicated 2/2 nginx:latest *:8080->80/tcp
                    root@manager1:~# docker service ps test_nginx
                    ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
                    0l9e32rwx9n2 test_nginx.1 nginx:latest worker1 Running Running 27 seconds ago
                    idg9t7rrrige test_nginx.2 nginx:latest manager1 Running Running 27 seconds ago
                    root@manager1:~# docker ps
                    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
                    bc3de40aa4ee nginx:latest "nginx -g 'daemon of…" 45 seconds ago Up 44 seconds 80/tcp test_nginx.2.idg9t7rrrigej7gc2m0m8wblf
                    root@manager1:~# docker exec -it bc3de40aa4ee bash
                    root@bc3de40aa4ee:/# cd /etc/nginx/conf.d/
                    root@bc3de40aa4ee:/etc/nginx/conf.d# ls
                    default.conf site.conf
                    root@bc3de40aa4ee:/etc/nginx/conf.d# cat site.conf
                    server {
                    listen 80;
                    server_name localhost;
                    location / {
                    root /usr/share/nginx/html;
                    index index.html index.htm;
                    }
                    }


                    root@bc3de40aa4ee:/etc/nginx/conf.d# service nginx status
                    [ ok ] nginx is running.

                    5.在浏览器中访问

                    在docker-machine 中通过访问虚拟机的IP地址来访问



                    最后修改时间:2020-01-25 11:33:51
                    文章转载自运维笔记本,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论