上一篇: Docker 入门 (四 Swarms 集群)

Stacks

简介

在第四部分Docker 入门 (四 Swarms 集群), 你学会了如何建立一个集群,并且在集群上部署了一个应用,该应用在多台机器上的容器上协作运行。

在第5部分中,您将到达分布式应用程序层次结构的顶部:堆栈。 堆栈是一组相互关联的服务,它们共享依赖关系,并且可以协调和缩放在一起。 单个堆栈能够定义和协调整个应用程序的功能(尽管非常复杂的应用程序可能希望使用多个堆栈)。

一些好消息是,从第3部分开始,当您创建Compose文件并使用docker堆栈部署时,您在技术上一直在使用堆栈。 但这是在单个主机上运行的单个服务堆栈,这通常不是生产中发生的事情。 在这里,您可以学习所学内容,使多个服务相互关联,并在多台计算机上运行它们。

添加新服务并重新部署

将服务添加到docker-compose.yml文件很容易。 首先,让我们添加一个免费的可视化服务,让我们看看我们的swarm如何调度容器。

  1. 在编辑器中打开docker-compose.yml并用以下内容替换其内容。 请务必将username / repo:tag替换为您的镜像信息。
version: "3"
services:web:# replace username/repo:tag with your name and image detailsimage: username/repo:tagdeploy:replicas: 5restart_policy:condition: on-failureresources:limits:cpus: "0.1"memory: 50Mports:- "80:80"networks:- webnetvisualizer:image: dockersamples/visualizer:stableports:- "8080:8080"volumes:- "/var/run/docker.sock:/var/run/docker.sock"deploy:placement:constraints: [node.role == manager]networks:- webnet
networks:webnet:

在这里新增了web 服务,叫visualizer。注意在这里有两个新东西,volumes key:使visualizer服务有权限访问Docker主机的套接字文件,placement key:确保visualizer服务只运行在集群管理机上而不是Worker上。

我们待会详细解释placement constraints和 volumes。

  1. 确保您的shell配置为与myvm1通信。
    docker-machine env myvm1eval $(docker-machine env myvm1)
  1. 重新部署应用
docker stack deploy -c docker-compose.yml getstartedlab
  1. 验证
    查看visualizer:

    查看service:
    出现的问题:dockersamples/visualizer:stable 一直处在Prepare状态。这里不是问题,只需要耐心等待即可变成Running。
[hb@hb-desktop Bird2]$ docker stack ps getstartedlab
ID                  NAME                         IMAGE                             NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
gf72dv1epu1b        getstartedlab_visualizer.1   dockersamples/visualizer:stable   myvm1               Running             Running 18 seconds ago
hxbcwk8x7cj8        getstartedlab_web.1          hebiao/get-started:part1          myvm2               Running             Running 11 minutes ago
hbsdgoas3iy3        getstartedlab_web.2          hebiao/get-started:part1          myvm2               Running             Running 11 minutes ago
y6nj81bctipp        getstartedlab_web.3          hebiao/get-started:part1          myvm1               Running             Running 11 minutes ago
xbzp341tj8kg        getstartedlab_web.4          hebiao/get-started:part1          myvm2               Running             Running 11 minutes ago
sw0doud6mjup        getstartedlab_web.5          hebiao/get-started:part1          myvm1               Running             Running 11 minutes ago                       

建立Redis保存数据

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

  1. 保存这个新的docker-compose.yml文件,最后添加一个Redis服务。 请务必将username / repo:tag替换为您的镜像信息。
version: "3"
services:web:# replace username/repo:tag with your name and image detailsimage: username/repo:tagdeploy:replicas: 5restart_policy:condition: on-failureresources:limits:cpus: "0.1"memory: 50Mports:- "80:80"networks:- webnetvisualizer:image: dockersamples/visualizer:stableports:- "8080:8080"volumes:- "/var/run/docker.sock:/var/run/docker.sock"deploy:placement:constraints: [node.role == manager]networks:- webnetredis:image: redisports:- "6379:6379"volumes:- "/home/docker/data:/data"deploy:placement:constraints: [node.role == manager]command: redis-server --appendonly yesnetworks:- webnet
networks:webnet:

Redis 有官方的Docker镜像。Redis的暴露出6379和外部通信。

最重要的是,redis规范中有一些内容可以使数据在此堆栈的部署之间保持不变:

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

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

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

  • 您放置在Redis服务上的放置约束,确保它始终使用相同的主机。
  • 您创建的卷,允许容器访问./data(在主机上)作为/ data(在Redis容器内)。 当容器来来往往时,存储在指定主机上的./data中的文件仍然存在,从而实现连续性。
  1. 在管理器上创建一个./data目录:
docker-machine ssh myvm1 "mkdir ./data"
  1. 确保您的shell配置为与myvm1通信
    docker-machine env myvm1eval $(docker-machine env myvm1)
  1. 再次执行部署
docker stack deploy -c docker-compose.yml getstartedlab
  1. 验证(如果除了问题就多检查即便docker-compose.yml文件,尽量拷贝粘贴)
    查看service:
[hb@hb-desktop Bird2]$ docker service ls
ID                  NAME                       MODE                REPLICAS            IMAGE                             PORTS
m0tevz136u5k        getstartedlab_redis        replicated          1/1                 redis:latest                      *:6379->6379/tcp
hsad3358i674        getstartedlab_visualizer   replicated          1/1                 dockersamples/visualizer:stable   *:8080->8080/tcp
x1niigeaxis4        getstartedlab_web          replicated          5/5                 hebiao/get-started:part1          *:80->80/tcp

浏览器验证:

Docker入门 (五 Stacks)相关推荐

  1. Docker入门(三):容器(Containers)

    这个<Docker入门系列>文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指 ...

  2. Docker入门六部曲——服务

    原文链接:http://www.dubby.cn/detail.html?id=8735 准备 已经安装好Docker 1.13或者以上的版本. 安装好Docker Compose.如果你是用的是Do ...

  3. Docker学习五:Docker 数据管理

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  4. Docker入门到实践 (一) docker简介与安装、常用命令讲解

    Docker入门到实践 (一) docker简介与安装 一.docker 介绍   Docker 是一个开源的应用容器引擎 打包应用以及依赖包到一个可移植的镜像中,发布到任何机器上,实现虚拟化.容器是 ...

  5. 自勉,持续学习,docker入门

    自勉,持续学习,docker入门 简介 一. docker 的基本架构 二.安装 docker 三. image 镜像 四.容器 五.数据卷概念 配置数据卷 配置数据卷容器 简介 记住重要的几点: D ...

  6. Docker教程(1)Docker 入门

    这里只是业余爱好,浅浅的研究了一下Docker,更详细的资料请参考:<Docker中文文档>.<Docker入门教程> 博文整理自阮一峰老师的网络日志 2013年发布至今, D ...

  7. Docker入门之路(一):部署Nginx

    引言 如果对Docker不太熟悉的小伙伴们可以先去看一下Docker入门,再来看这篇文章哟! https://blog.csdn.net/m0_53559551/article/details/121 ...

  8. 【Docker入门使用】

    Docker入门使用 一.docker简介 二.为什么使用docker 三.linux中简单使用docker 卸载遗留docker旧版本 安装及启动 四.IDEA中使用docker 前言 开启dock ...

  9. Docker入门汇总

    Docker入门 一.Docker简介 简单来说,Docker就是一个引擎,一个可以创建镜像的引擎.Docker分为三大部分,分别为镜像.容器.仓库. 镜像:docker镜像就相当于一个模板,这个模板 ...

最新文章

  1. Open3D面向机器学习的扩展库
  2. 分布式监控系统Zabbix3.2对数据库的连接数预警
  3. js如何生成一个对象,并转化为json字符串
  4. 对当前JAVA流行框架的一些小感悟
  5. OPPO智能眼镜发布,撕掉手机标签,CEO陈明永罕见亮相砸500亿投研发
  6. Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser
  7. JS快速实现深拷贝--一行就搞定了
  8. (Python编程)Pickle对象
  9. Think in Java第四版 读书笔记1
  10. 标准的软件开发是怎样的?
  11. 查看Tensorflow 是使用GPU or CPU运行
  12. 朴素贝叶斯(Naive-Bayes)
  13. jdk下载和安装教程
  14. 小米4Linux刷机包,小米4官方原厂固件rom线刷刷机包下载_小米4线刷官方系统包
  15. 线性回归中一次性实现所有自变量的单因素分析
  16. 如何将wireshark抓包的中文恢复
  17. vue打包多个html,vue多页面应用打包配置
  18. STM32系统定时器闪烁LED灯
  19. 获取企业微信授权code
  20. C语言-初识C语言(4)

热门文章

  1. excel数据整理:网络表格数据规范处理方法
  2. 使用ffmpeg将mts格式视频文件转为mp4视频文件
  3. java实现debounce_Rxjava debounce 操作符
  4. Docker基础入门getting started
  5. Blend for Visual Studio 2017 插入obj格式3D模型
  6. layui table 表头合并_layui table合并单元格
  7. java输出一行自己的名字班级_编写Java程序分行输出自己的学号、姓名、班级、专业、籍贯和兴趣爱好等信息。...
  8. WinCE 大排档第一篇
  9. JS全屏代码,解决PDF.js在iframe中部分浏览器全屏功能错误
  10. 删除wordpress评论表单中的网址文本框