Part 3: Services

介绍

在第3部分中,我们将扩展应用程序并启用负载平衡。为此,我们必须在分布式应用程序的层次结构中提升一个级别:服务。

  1. Stack

  2. Services (你在这里)

  3. Container (涵盖在第2部分中)

关于服务

在分布式应用程序中,应用程序的不同部分被称为“服务”。例如,如果你想象一个视频分享网站,它可能包括一个用于在数据库中存储应用程序数据的服务,一个在用户上传某个东西后在后台进行视频转换的服务,一个为前端服务的服务,等等。

服务实际上只是“生产中的容器”。一个服务只运行一个镜像,但它将以镜像的方式运行——它应该使用的端口,容器应该运行多少个副本,这样服务具有它需要的容量等等——的方式进行了编码。扩展服务会改变运行该软件的容器实例的数量,为流程中的服务分配更多的计算资源。

幸运的是,使用Docker平台定义、运行和扩展服务很容易——只需编写docker-compose.yml文件。

你的第一个docker-compose.yml文件

docker-compose.yml文件是一个YAML文件,它定义了Docker容器在生产中的行为。

docker-compose.yml

将此文件保存为docker-compose.yml无论什么位置。确保您已经将在第2部分中创建的镜像推送到注册中心,更新这个yml文件,用你镜像中的内容替换username/repo:tag

version: "3"
services:web:# replace username/repo:tag with your name and image detailsimage: username/repo:tagdeploy:replicas: 5resources:limits:cpus: "0.1"memory: 50Mrestart_policy:condition: on-failureports:- "80:80"networks:- webnet
networks:webnet:

docker-compose.yml告诉Docker做下面的事情:

  • 从注册表中提取第2步中上传的图像。

  • 将该映像的5个实例作为web服务运行,限制每个CPU使用最多10%的CPU(跨所有内核)和50MB RAM。

  • 如果失败,立即重新启动容器。

  • 将端口80映射到web的端口80。

  • 指示web容器通过一个名为webnet的负载均衡网络共享端口80。(在内部,容器本身将在临时端口上发布到web的端口80。)

  • 用默认设置定义webnet网络(这是一个负载均衡的覆盖网络)。

运行您的新负载平衡应用程序

在我们使用docker stack deploy命令之前,我们先运行:

docker swarm init

注意:我们将在第4部分中了解该命令的含义。如果你不运行docker swarm init,你会得到一个错误,“这个节点不是一个群集管理器。”

现在,让我们来运行它。你必须给你的应用一个名字。在这里,它被设置为getstartedlab

docker stack deploy -c docker-compose.yml getstartedlab

我们的单一服务堆栈在一个主机上运行我们部署映像的5个容器实例。让我们调查。
在我们的应用程序中获得一个服务的服务ID:

docker service ls

您将看到web服务的输出,并以您的应用程序名称为前提。如果您将其命名为与本例中显示的相同,则名称将为getstartedlab_web。服务ID也被列出,以及复制的数量、图像名称和暴露的端口。
在服务中运行的单个容器称为任务。任务被赋予独特的id,replicas递增,知道达到您在docker-compose.yml中定义的副本数量。列出服务的任务:

docker service ps getstartedlab_web

如果您将系统上所有的容器列表列出,但这些任务也不会被服务过滤:

docker container ls -q

您可以多次运行curl -4 http://localhost,或者在浏览器中访问该URL并点击刷新几次。

clipboard.png

无论如何,您将看到容器ID的更改,显示负载平衡;在每个请求中,选择一个循环模式的5个任务中的一个来响应。容器id将与前面的命令(docker container ls -q)匹配。

扩大app的规模

您可以通过在docker-compose.yml中更改replicas来扩展应用程序,保存更改,并重新运行docker stack deploy命令:

docker stack deploy -c docker-compose.yml getstartedlab

Docker将做一个就地更新,不需要先拆下堆栈,也不需要杀死任何容器。
现在,重新运行docker container ls -q,以查看已部署的实例重新配置。如果您将副本按比例放大,就会有更多的任务,因此会有更多的容器。

拿下应用程序和swarm

  • 拿下应用程序,用docker stack rm

    docker stack rm getstartedlab
  • 拿下swarm

    docker swarm leave --force

这就像站起来,和Docker一起扩展你的应用一样简单。您已经向学习如何在生产中运行容器迈出了一大步。接下来,您将学习如何在Docker机器集群上运行这个应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql ldf文件太大_Linux_数据库清除日志文件(LDF文件过大),清除日志: 复制代码 代码如 - phpStudy...

数据库清除日志文件(LDF文件过大)清除日志:复制代码 代码如下:DECLARE LogicalFileName sysname,MaxMinutes INT,NewSize INTUSE szwzcheck -- 要操作的数据库名SELECT LogicalFileName szwzcheck_Log, -- 日志文件名MaxMinutes 10, -- Limit on time allowed to …

emwin之错误使用控件函数导致死机现象

2018-10-15 导致死机的代码示例如下 1 /**2 * brief widget ID define3 * {4 */5 6 #define ID_WINDOW_0 (GUI_ID_USER 0x00)7 #define ID_TEXT_0 (GUI_ID_USER 0x01)8 #define ID_TEXT_1 (GUI_ID_USER …

diy感应usb摄像头拍照_DIY无线感应充电器

diy感应usb摄像头拍照Courtesy of Instructables user Inducktion shares a very detailed tutorial on how to build a wireless power charger. He explains the impetus behind the project: 由Instructables用户提供Inducktion分享了有关如何构建无线电源充电器的非常详细…

ubuntu7.10安装到3D开启

累了好几天,重装了十几遍终于把ubuntu7.10搞定到了我自认为完美的状态了。现在总结一下安装过程(按操作顺序记录):1.在xp下不管用pqmajac还是其他硬盘分区工具分出10G的空余分区来(实验阶段10G尝试下)&…

初学者对python的认识_Python初学者列表,python,初识

1.认识列表列表可以放入所有我们目前学习过的数据类型,甚至包括列表2.有关列表的方法、内置函数(设列表的名称为list)向列表中添加元素:append():list.append(要添加的元素),注意每次只能添加一个元素,被添加的元素自动…

常用模块之 time,datetime,random,os,sys

time与datetime模块 先认识几个python中关于时间的名词: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。1970年之前的日期无法以此表…

使用aSpotCat控制您的Android应用权限

Viewing the permissions of each installed Android app requires digging through the Manage Applications screen and examining each app one by one — or does it? aSpotCat takes an inventory of the apps on your system and the permissions they require. 要查看每…

xtrabackup备份mysql“ib_logfile0 is of different”错误分析

今天用xtrabackup工具完整备份mysql数据库的时候出现“./ib_logfile0 is of different”错误,具体的日志信息如下: 我第一时间查询了百度和谷歌都没有找见相对应的答案。决定从错误日志入手,上面的日志提示说:mysql数据库inondb的日志文件的大…

java socket 报文解析_java socket解析和发送二进制报文工具(附java和C++转化问题)

解析:首先是读取字节:/*** 读取输入流中指定字节的长度* * 输入流**paramlength 指定长度*return指定长度的字节数组*/public static byte[] readBytesFromTo(byte[] buffer, int from, intlength) {byte[] sub new byte[length];int cur 0;for (int i from; i < length …

Ubuntu防火墙:ufw

原始linux的防火墙是iptables&#xff0c;以为过于繁琐&#xff0c;各个发行版几乎都有自己的方案; ubuntu下的防火墙是ufw[ubuntu fireward的缩写]&#xff0c;centos的防火墙是fireward ubuntu下&#xff1a; 启用或者关闭防火墙 sudo ufw enable|disable sudo ufw default d…

如何使自己的不和谐机器人

Discord has an excellent API for writing custom bots, and a very active bot community. Today we’ll take a look at how to get started making your own. Discord具有出色的用于编写自定义机器人的API&#xff0c;以及非常活跃的机器人社区。 今天&#xff0c;我们将探…

​css3属性选择器总结

css3属性选择器总结 &#xff08;1&#xff09;E[attr]只使用属性名&#xff0c;但没有确定任何属性值 <p miaov"a1">111111</p> <p miaov"a2">111111</p> p[miaov]{background: red;} /*所有属性为miaov的元素都会被背景变红&a…

java复合赋值运算符_Java 之复合赋值运算符

1.引入问题切入正题&#xff0c;看下面代码&#xff0c;结果应该是怎么样的public class App{public static void main( String[] args ){byte a1 ;int b 10;a ab;System.out.println(a);ab;System.out.println(a);}}这段代码的执行结果是什么&#xff1f;&#xff1f;2. 执行…

程序代码初学者_初学者:如何使用热键在Windows中启动任何程序

程序代码初学者Assigning shortcut keys to launch programs in Windows is probably one of the oldest geek tricks in the book, but in true geek fashion we are going to show you how to do it in Windows 8. 分配快捷键以在Windows中启动程序可能是本书中最古老的怪胎技…

stevedore——启用方式

2019独角兽企业重金招聘Python工程师标准>>> setuptools维护的入口点注册表列出了可用的插件&#xff0c;但是并没有为最终用户提供使用或启用的方法。 下面将描述用于管理要使用的扩展集的公共模式。 通过安装方式启用 对于许多应用程序&#xff0c;仅仅安装一个扩…

java 重置定时器_可重置Java定时器

我想有一个java.utils.Timer与一个可重置时间在java.I需要设置一次off事件发生在X秒。如果在创建定时器的时间和X秒之间没有发生任何事情&#xff0c;则事件会正常发生。然而&#xff0c;如果在X秒之前&#xff0c;我决定该事件应该发生在Y秒后&#xff0c;然后我想要能够告诉定…

C# -- 文件的压缩与解压(GZipStream)

文件的压缩与解压 需引入 System.IO.Compression; 1.C#代码&#xff08;入门案例&#xff09; 1 Console.WriteLine("压缩文件...............");2 using (FileStream fr File.OpenRead("d:\\test.txt"))3 {4 …

win7屏保文件.scr_如何将屏保添加到Ubuntu 12.04

win7屏保文件.scrUbuntu 12.04 doesn’t ship with any screen savers, just a black screen that appears when your system is idle. If you’d rather have screensavers, you can swap gnome-screensaver for XScreenSaver. Ubuntu 12.04没有附带任何屏幕保护程序&#xff…

简单读写XML文件

IPAddress.xml 文件如下&#xff1a; <?xml version"1.0" encoding"utf-8"?><IP><IPAddress>192.168.0.120</IPAddress></IP> 在 Form 窗体(读取XML配置.Designer.cs)中有如下控件&#xff1a; 代码 privateSystem.Wind…

如何与Ubuntu One同步配置文件

Ubuntu One lets you easily synchronize files and folders, but it isn’t clear how to sync configuration files. Using Ubuntu One’s folder synchronization options or some symbolic links, you can synchronize configuration files across all your computers. Ubu…