docker练习-堆栈
介绍
分布式应用程序层次结构的顶部:堆栈。
堆栈是一组相互关联的服务,它们共享依赖关系,并且可以协调和缩放在一起。
单个堆栈能够定义和协调整个应用程序的功能(尽管非常复杂的应用程序可能希望使用多个堆栈)。
添加新服务并重新部署
让我们看看我们的swarm如何调度容器。
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以列出计算机并确保已连接到myvm13. docker stack deploy在管理器上重新运行该命令,并更新需要更新的任何服务:docker stack deploy -c docker-compose1.yml getstartedlab4. 看一下可视化工具。
在Compose文件中看到了
visualizer在端口8080上运行docker-machine ls。通过运行获取其中一个节点的IP地址。转到端口8080的IP地址

可视化工具是一个独立的服务,可以在任何包含它的应用程序中运行。
它不依赖于任何其他东西。
坚持数据
再次通过相同的工作流程来添加Redis数据库来存储应用数据。
保存这个新
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堆栈。
./data在管理器上创建一个目录:docker-machine ssh myvm1 "mkdir ./data"
确保您的shell配置为与之通信
myvm1运行
docker-machine ls以列出计算机并确保已连接到myvm1
再跑
docker stack deploy一次。$ docker stack deploy -c docker-compose.yml getstartedlab
运行
docker service ls以验证三个服务是否按预期运行。
- 检查一个节点上的网页,例如
http://192.168.99.101,并查看访问者计数器的结果,该计数器现已存在并在Redis上存储信息。 
- 同时,检查在上的任一节点的IP地址,端口8080的可视化工具,并注意看
redis与一起运行服务web和visualizer服务。 
docker练习-堆栈的更多相关文章
- Docker生态会重蹈Hadoop的覆辙吗?
从网上找到了这篇2016年中旬刷爆朋友圈的文章,没有找到作者和首发出处.两年多过去了,文中分析的很多不确定性都有了结论,里面不少分析思路.观点还是很不错的. Docker的兴起和Hadoop何其相似 ...
- 【翻译】Docker Compose 与Docker Stack的不同
翻译原文 Docker引擎在1.12 版本集成了Docker Swarm, 带来了一些新工具. 现在可以无需安装 Docker Compose, 就可以利用docker-compose.yml 文件 ...
- 【Pod Terminating原因追踪系列之三】让docker事件处理罢工的cancel状态码
本篇为Pod Terminating原因追踪系列的第三篇,前两篇分别介绍了两种可能导致Pod Terminating的原因.在处理现网问题时,Pod Terminating属于比较常见的问题,而本系列 ...
- 不止Docker:8款容器管理开源方案
Docker诞生于2013年,并普及了容器的概念,以至于大多数人仍然将容器的概念等同于"Docker容器". 作为第一个吃螃蟹的人,Docker设置了新加入者必须遵守的标准.例如, ...
- Docker 堆栈
1. Stack stack(译:堆叠,堆栈)是一组相互关联的服务,它们共享依赖关系,并且可以一起编排和伸缩. 在上一篇<Docker 服务>中我们知道可以通过创建一个docker-co ...
- docker从零开始(五)堆栈初体验,stacks
先决条件 安装Docker 1.13或更高版本. 获取Docker Compose,请参考第三节 按照第四节中的描述获取Docker Machine. 在第二节中了解如何创建容器. 确保您的图像作为已 ...
- 构建Docker Compose服务堆栈
1.安装了docker-compose,现在我们要使用docker-compose来运行容器栈.这个地方会有两个容器,一个容器中使用Flask搭建的简单应用,另一个容器是Redis,Flash会向re ...
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...
- Docker与CI持续集成/CD
背景 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制 ...
随机推荐
- 数据库设计mysql字段不默认为NULL原因搜集
索引不会包含有NULL值的列 只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的.所以我们在数据库设计时不要让字段的默认值为NULL ...
- JS拉平数组
JS拉平数组 有时候会遇到一个数组里边有多个数组的情况(多维数组),然后你想把它拉平使其成为一个一维数组,其实最简单的一个方法就是ES6数组方法Array.prototype.flat.使用方法如下: ...
- Python--day19--time模块
时间戳转化成结构化时间: 本地时间转换成时间字符串: 时间模块 和时间有关系的我们就要用到时间模块.在使用模块之前,应该首先导入这个模块. #常用方法 1.time.sleep(secs) (线程)推 ...
- 2008年NOIP普及组复赛题解
题目涉及算法: ISBN号码:简单字符串模拟: 排座椅:贪心: 传球游戏:动态规划: 立体图:模拟. ISBN号码 题目链接:https://www.luogu.org/problem/P1055 简 ...
- Python--day27--复习
例1:
- HDU 1326
题意:给出一堆高度不一的砖头,现在使他们高度一样,问最少的移动次数,(每减少1就是移动一次) 思路:求出平均高度,然后模拟最后平均高度的数组,也就是说,每个数组对应每一个平均高度,也就是说比平均高度大 ...
- HDU 1236
水题~~但我做了很久: 题意:是中国人都懂了 思路:结构体排序: 以后要多用用重定义的排序手段,!!!!!多用!!多用!!多用!! #include<iostream> #include& ...
- java接口(interface)
引入:抽象类是从多个类中抽象出来的模板,若要将这种抽象进行得更彻底,就得用到一种特殊的“抽象类”→ 接口; 例子: 生活中听说过的USB接口其实并不是我们所看到的那些插槽,而是那些插槽所遵循的一种规范 ...
- html(三)注册页面与重定向
注册和登陆的建立是通过界面post提交表单然后在测试界面获取提交的值,进行判断. 1.测试传来的值,是否为空,将值传回到测试界面: ("Reg.jsp?errorCode=" + ...
- php_sphinx安装使用
Sphinx的简介: Sphinx是一个独立的全文索引引擎,意图为其他应用提供高速.低空间 占用.搜索结果高相关度的全文搜索功能.Sphinx可以非常容易的与 SQL数据库和脚本语言集成.内置MySQ ...