docker练习-堆栈

介绍

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

堆栈是一组相互关联的服务,它们共享依赖关系,而且能够协调和缩放在一块儿。web

单个堆栈可以定义和协调整个应用程序的功能(尽管很是复杂的应用程序可能但愿使用多个堆栈)。redis

添加新服务并从新部署

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

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

    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管理器上运行 - 毫不是一个工做者。

    webvisualizervolumesplacement

    2. 确保您的shell配置为与之通讯myvm1数据库

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

     
        

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

     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服务。
相关文章
相关标签/搜索