介绍

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

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

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

添加新服务并重新部署

让我们看看我们的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服务。
     

docker练习-堆栈的更多相关文章

  1. Docker生态会重蹈Hadoop的覆辙吗?

    从网上找到了这篇2016年中旬刷爆朋友圈的文章,没有找到作者和首发出处.两年多过去了,文中分析的很多不确定性都有了结论,里面不少分析思路.观点还是很不错的. Docker的兴起和Hadoop何其相似 ...

  2. 【翻译】Docker Compose 与Docker Stack的不同

    翻译原文 Docker引擎在1.12 版本集成了Docker Swarm,  带来了一些新工具. 现在可以无需安装 Docker Compose, 就可以利用docker-compose.yml 文件 ...

  3. 【Pod Terminating原因追踪系列之三】让docker事件处理罢工的cancel状态码

    本篇为Pod Terminating原因追踪系列的第三篇,前两篇分别介绍了两种可能导致Pod Terminating的原因.在处理现网问题时,Pod Terminating属于比较常见的问题,而本系列 ...

  4. 不止Docker:8款容器管理开源方案

    Docker诞生于2013年,并普及了容器的概念,以至于大多数人仍然将容器的概念等同于"Docker容器". 作为第一个吃螃蟹的人,Docker设置了新加入者必须遵守的标准.例如, ...

  5. Docker 堆栈

    1.  Stack stack(译:堆叠,堆栈)是一组相互关联的服务,它们共享依赖关系,并且可以一起编排和伸缩. 在上一篇<Docker 服务>中我们知道可以通过创建一个docker-co ...

  6. docker从零开始(五)堆栈初体验,stacks

    先决条件 安装Docker 1.13或更高版本. 获取Docker Compose,请参考第三节 按照第四节中的描述获取Docker Machine. 在第二节中了解如何创建容器. 确保您的图像作为已 ...

  7. 构建Docker Compose服务堆栈

    1.安装了docker-compose,现在我们要使用docker-compose来运行容器栈.这个地方会有两个容器,一个容器中使用Flask搭建的简单应用,另一个容器是Redis,Flash会向re ...

  8. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  9. Docker与CI持续集成/CD

    背景        Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制 ...

随机推荐

  1. js循环遍历数组(对象)

    1,for循环 对于循环应该是最常用的一种遍历方式了,通常用来遍历数组结构. let arr = [a,b,d];for (let i=0; i<arr.length; i++){ consol ...

  2. ELMo解读(论文 + PyTorch源码)

    ELMo的概念也是很早就出了,应该是18年初的事情了.但我仍然是后知后觉,居然还是等BERT出来很久之后,才知道有这么个东西.这两天才仔细看了下论文和源码,在这里做一些记录,如果有不详实的地方,欢迎指 ...

  3. 2018年NOIP普及组复赛题解

    题目涉及算法: 标题统计:字符串入门题: 龙虎斗:数学题: 摆渡车:动态规划: 对称二叉树:搜索. 标题统计 题目链接:https://www.luogu.org/problem/P5015 这道题目 ...

  4. mac上的mysql管理工具sequel pro

    https://blog.csdn.net/wan_zaiyunduan/article/details/54909389 以前用过Plsql.Navicat.Workbench,现在换到mac上,用 ...

  5. php三目运算计算三个数最大值最小值

    文章地址:https://www.cnblogs.com/sandraryan/ $x = 10; $y = 45; $z = 3; //求出三个数字中最大值最小值 //先比较x y,如果x> ...

  6. HDU 1236

    水题~~但我做了很久: 题意:是中国人都懂了 思路:结构体排序: 以后要多用用重定义的排序手段,!!!!!多用!!多用!!多用!! #include<iostream> #include& ...

  7. linux的iptables和firewall的区别

    firewall是centos7里面的新的防火墙命令,它底层还是使用 iptables 对内核命令动态通信包过滤的,简单理解就是firewall是centos7下管理iptables的新命令 Linu ...

  8. P1038 间谍入侵

    题目描述 爱丽丝魔法王国成立10周年,于是决定矩形国庆大阅兵. 在国庆大阅兵期间,为了防止暗黑王国的间谍乔装成平民混入,需要对每一个进城的人做检测. 因为暗黑王国的人长得和爱丽丝魔法王国的人长得很像, ...

  9. C# 转换类型和字符串

    有时候我们需要互转类型和字符串,把字符串转类型.把类型转字符串. 如果是基础类型,可以使用 x.Parse 这个方法,很多基础类型都支持. 那么我们可以使用 TypeDescriptor string ...

  10. Linux 内核引用计数的操作

    一个 kobject 的其中一个关键函数是作为一个引用计数器, 给一个它被嵌入的对象. 只 要对这个对象的引用存在, 这个对象( 和支持它的代码) 必须继续存在. 来操作一个 kobject 的引用计 ...