zoukankan      html  css  js  c++  java
  • docker练习-堆栈

    介绍

    分布式应用程序层次结构的顶部:堆栈。

    堆栈是一组相互关联的服务,它们共享依赖关系,并且可以协调和缩放在一起。

    单个堆栈能够定义和协调整个应用程序的功能(尽管非常复杂的应用程序可能希望使用多个堆栈)。

    添加新服务并重新部署

    让我们看看我们的swarm如何调度容器。

    1. docker-compose1.yml在编辑器中打开并使用以下内容替换其内容

      version: "3"
      services:
        web:
          # replace username/repo:tag with your name and image details
          image: wangshu19930818/friendlyhello:v1
          deploy:
            replicas: 5
            restart_policy:
              condition: on-failure
            resources:
              limits:
                cpus: "0.1"
                memory: 50M
          ports:
            - "80:80"
          networks:
            - webnet
        visualizer:
          image: dockersamples/visualizer:stable
          ports:
            - "8080:8080"
          volumes:
            - "/var/run/docker.sock:/var/run/docker.sock"
          deploy:
            placement:
              constraints: [node.role == manager]
          networks:
            - webnet
      networks:
        webnet:

      这里唯一新的是对等服务web,名为visualizer
      注意这里有两个新的东西:一个volumes键,让可视化工具访问Docker的主机套接字文件,以及一个placement
      密钥,
      确保这个服务只能在一个swarm管理器上运行 - 绝不是一个工作者。

      2. 确保您的shell配置为与之通信myvm1

            运行docker-machine ls以列出计算机并确保已连接到myvm1

      3. docker stack deploy在管理器上重新运行该命令,并更新需要更新的任何服务:

       docker stack deploy -c docker-compose1.yml getstartedlab

      4. 看一下可视化工具。

      在Compose文件中看到了visualizer在端口8080上运行docker-machine ls

      通过运行获取其中一个节点的IP地址转到端口8080的IP地址

      可视化工具是一个独立的服务,可以在任何包含它的应用程序中运行。

      它不依赖于任何其他东西。

      坚持数据

      再次通过相同的工作流程来添加Redis数据库来存储应用数据。

      1. 保存这个新docker-compose.yml文件,最后添加一个Redis服务。请务必更换username/repo:tag图像详细信息。

        version: "3"
        services:
          web:
            # replace username/repo:tag with your name and image details
            image: wangshu19930818/friendlyhello:v1
            deploy:
              replicas: 5
              restart_policy:
                condition: on-failure
              resources:
                limits:
                  cpus: "0.1"
                  memory: 50M
            ports:
              - "80:80"
            networks:
              - webnet
          visualizer:
            image: dockersamples/visualizer:stable
            ports:
              - "8080:8080"
            volumes:
              - "/var/run/docker.sock:/var/run/docker.sock"
            deploy:
              placement:
                constraints: [node.role == manager]
            networks:
              - webnet
          redis:
            image: redis
            ports:
              - "6379:6379"
            volumes:
              - "/home/docker/data:/data"
            deploy:
              placement:
                constraints: [node.role == manager]
            command: redis-server --appendonly yes
            networks:
              - webnet
        networks:
          webnet:
        

        Redis端口6379已由Redis预先配置为从容器暴露给主机,在我们的Compose文件中,我们将它从主机暴露给全世界,因此实际上可以输入任何IP的IP如果您愿意,可以将节点导入Redis Desktop Manager并管理此Redis实例。

        最重要的是redis规范中有一些事项会使数据在此堆栈的部署之间保持不变:

        • redis 总是在管理器上运行,所以它总是使用相同的文件系统。
        • redis访问主机文件系统中的任意目录作为/data容器内部,这是Redis存储数据的位置。

        总之,这是在主机的物理文件系统中为Redis数据创建“真实来源”。如果没有这个,Redis会将其数据存储 /data在容器的文件系统中,如果重新部署该容器,将会被删除。

        这个真相来源有两个组成部分:

        • 您放置在Redis服务上的放置约束,确保它始终使用相同的主机。
        • 您创建的容器允许容器访问./data(在主机上)/data(在Redis容器内)。
        • 当容器来来往往时,存储在./data指定主机上的文件仍然存在,从而实现连续性。

        已准备好部署新的Redis-using堆栈。

      2. ./data在管理器上创建一个目录:

        docker-machine ssh myvm1 "mkdir ./data"
        
      3. 确保您的shell配置为与之通信myvm1

        • 运行docker-machine ls以列出计算机并确保已连接到myvm1

      4. 再跑docker stack deploy一次。

        $ docker stack deploy -c docker-compose.yml getstartedlab
        
      5. 运行docker service ls以验证三个服务是否按预期运行。

      6. 检查一个节点上的网页,例如http://192.168.99.101,并查看访问者计数器的结果,该计数器现已存在并在Redis上存储信息。
      7. 同时,检查在上的任一节点的IP地址,端口8080的可视化工具,并注意看redis与一起运行服务webvisualizer服务。
       
  • 相关阅读:
    FLV视频转换的利器 ffmpeg.exe
    ffmpeg参数设定解说
    SQL里加减日期
    SQL Server 获得影响行数
    CheckBoxList RadioButtonList 不生成table 表示
    SQL语句 从一个表读取数据,写入到另一个表的相同字段中
    ffmpeg和Mencoder使用实例小全
    执行存储过程出现:"不是有效的标识符。"
    SQL 格式化超长的字段
    js遍历选中的dom元素
  • 原文地址:https://www.cnblogs.com/wwchihiro/p/9295610.html
Copyright © 2011-2022 走看看