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.pswp.cn/news/279192.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279192.shtml
英文地址,請注明出處:http://en.pswp.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…