【Docker】swarm stack部署多service應用

前面我們已經學習過了Docker Compose,它可以用來進行一個完整的應用程序相互依賴的多個容器的編排的,但是缺點是只能在單機模式使用,不能在分布式多機器上使用;前面我們也學習了Docker swarm,它可以將單個服務部署為多個容器,并運行在不同集群節點上,構成服務集群,缺點是只能部署單個服務,不能同時編排多個服務。

但是在實際的生產開發中,我們一個完整的應用需要的服務往往不止一個,通過docker service命令來部署的話會很麻煩,那么能不能結合Docker Compose+Docker swarm的優點呢?這就是Docker Stack。

Docker Stack用于向swarm集群部署完整的應用程序堆棧,可以在分布式多機器上同時編排多個有依賴關系的服務。能夠在單個聲明文件中定義復雜的多服務應用,還提供了簡單的方式來部署應用并管理其完整的生命周期:初始化部署 -> 健康檢查 -> 擴容 -> 更新 -> 回滾,以及其他功能!可以簡單地理解為Docker Stack是集群下的Docker Compose。
在這里插入圖片描述

Docker Compose中的不支持項

Docker Stack編排依賴于聲明文件,其實也就是Docker Compse文件,不過Docker Stack對于Docker Compose文件有一個要求,文件的規范版本(頂層關鍵字version)必須是“3.0”或以上,而且一些Docker Compse文件中的關鍵字不受支持,如:

  • build
  • cgroup_parent
  • container_name
  • devices
  • tmpfs
  • external_links
  • links
  • network_mode
  • restart
  • security_opt
  • userns_mode

由于build關鍵字在Docker Stack中不受支持,不能在編排的過程中構建鏡像,docker stack部署用到的鏡像必須是已經構建發布好,并且發布到docker倉庫的,在服務編排過程各個節點中直接從docker倉庫拉取。

先構建鏡像:

$ sudo docker image build -t flask-demo .

登陸遠程鏡像倉庫:

$ sudo docker login --username=xxx@xxxx.com registry.cn-hangzhou.aliyuncs.com

這里使用的是阿里云的免費鏡像倉庫:https://cr.console.aliyun.com/cn-hangzhou/instances

再修改鏡像的tag:

$ sudo docker image tag flask-demo:latest registry.cn-hangzhou.aliyuncs.com/morris131/flask-demo:latest

最后將鏡像推送至遠程倉庫:

$ sudo docker push  registry.cn-hangzhou.aliyuncs.com/morris131/flask-demo:latest

手動部署多service

先創建一個overlay網絡:

$ sudo docker network create -d overlay mynet
kunkv8prss5gihgz5deowhdfw

然后部署redis service:

$ sudo docker service create --name redis --network mynet redis:latest redis-server --requirepass ABC
bn507bk9aaggf1lhhpnask9kq
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged

部署flask-demo service

$ sudo docker service create --name flask-demo --network mynet --env REDIS_HOST=REDIS --env REDIS_PASS=ABC -p 8080:5000 flask-demo:latest
image flask-demo:latest could not be accessed on a registry to record
its digest. Each node will access flask-demo:latest independently,
possibly leading to different nodes running different
versions of the image.xx9chfrx2ro3j8cnvab5vp0pm
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged

查看服務,可以看到flask-demo和redis都已經部署成功:

$ sudo docker service ls
ID             NAME         MODE         REPLICAS   IMAGE               PORTS
7yr3lamfse5k   flask-demo   replicated   1/1        flask-demo:latest   *:8080->5000/tcp
bn507bk9aagg   redis        replicated   1/1        redis:latest

訪問flask-demo服務:

$ curl 172.20.160.13:8080
Hello Container World! I have been seen 3 times and my hostname is bf03f59d3bab.

Docker Stack部署多service

前面可以看到通過docker service手動部署多個service非常繁瑣,需要一個一個service部署。

接下來使用Docker Stack來部署多service的服務。

編寫docker-compose.yml:

version: "3.3"services:flask-demo:image: registry.cn-hangzhou.aliyuncs.com/morris131/flask-demoenvironment:- REDIS_HOST=redis-server- REDIS_PASS=ABCnetworks:- demo-networkports:- 8080:5000redis-server:image: redis:latestcommand: redis-server --requirepass ABCnetworks:- demo-networknetworks:demo-network:

啟動服務:

$ sudo docker stack deploy --compose-file docker-compose.yml flask
Creating network flask_demo-network
Creating service flask_redis-server
Creating service flask_flask-demo

訪問服務:

$ curl 172.20.160.13:8080
Hello Container World! I have been seen 1 times and my hostname is 4a88aad138e7.

Stack基本命令的使用

Docker stack命令用于swam集群中對應用堆棧涉及到的多個服務進行編排部署和全生命周期管理。

常用的命令如下,可用help命令查看詳細說明:

$ sudo docker stack helpUsage:  docker stack COMMANDManage Swarm stacksCommands:config      Outputs the final config file, after doing merges and interpolationsdeploy      Deploy a new stack or update an existing stackls          List stacksps          List the tasks in the stackrm          Remove one or more stacksservices    List the services in the stackRun 'docker stack COMMAND --help' for more information on a command.

docker stack deploy

docker stack deploy [OPTIONS] STACK

根據Stack文件(通常是 docker-compose.yml)部署和更新Stack服務的命令,常用選項如下:

  • -c:指定compose文件路徑
  • –with-registry-auth:服務創建的時候,各個工作節點同步管理節點的私有倉庫登錄憑證,從而各個節點可用拉取私有倉庫鏡像

docker stack ls

docker stack ls

列出Swarm集群中的全部Stack,包括每個Stack擁有多少服務。

例如:

$ sudo docker stack ls
NAME      SERVICES
flask     2

docker stack ps

docker stack ps [OPTIONS] STACK

列出某個已經部署的Stack相關詳情。該命令支持Stack名稱作為其主要參數。

在服務啟動失敗時,docker stack ps命令是首選的問題定位方式。該命令展示了Stack中每個服務的概況,包括服務副本所在節點、當前狀態、期望狀態以及異常信息,再配合docker service logs查看某個具體服務或任務的詳細信息。

$ sudo docker stack ps flask
ID             NAME                   IMAGE                                                           NODE      DESIRED STATE   CURRENT STATE           ERROR     PORTS
oaq79y2xpvz0   flask_flask-demo.1     registry.cn-hangzhou.aliyuncs.com/morris131/flask-demo:latest   node1     Running         Running 6 minutes ago
03j987pc0yyn   flask_redis-server.1   redis:latest                                                    node2     Running         Running 5 minutes ago

docker stack services

docker stack services [OPTIONS] STACK

列出某個已經部署的Stack的服務,包括服務的模式,使用的鏡像,端口映射等。

$ sudo docker stack services flask
ID             NAME                 MODE         REPLICAS   IMAGE                                                           PORTS
yoynkqh2mh9n   flask_flask-demo     replicated   1/1        registry.cn-hangzhou.aliyuncs.com/morris131/flask-demo:latest   *:8080->5000/tcp
yrg986m18pps   flask_redis-server   replicated   1/1        redis:latest

docker stack rm

docker stack rm [OPTIONS] STACK [STACK...]

從Swarm集群中移除一個或多個Stack。移除操作執行前并不會進行二次確認。

$ sudo docker stack rm flask
Removing service flask_flask-demo
Removing service flask_redis-server
Removing network flask_demo-network

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210652.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210652.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210652.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于EIoT能源物聯網的智能照明系統應用改造-安科瑞 蔣靜

【摘要】:隨著物聯網技術的發展,許多場所針對照明合理應用物聯網照明系統,照明作為工廠的重要能耗之一,工廠的照明智能化控制,如何優化控制、提高能源的利用率,達到節約能源的目的。將互聯網的技術應用到工…

【PHP】學習筆記一:數組及JSON

目錄 一、初始化創建數組: 1. 簡單數組: 2. 索引號是字符串數組(對象數組): 3. 數組中增加一個元素: 4. 對象數組轉JSON字符串 5. JSON字符串轉數組 一、初始化創建數組: 1. 簡單數組&am…

golang的文件操作

獲取文件列表路徑 package _caseimport ("fmt""log""os""strings" )// 獲取文件路徑 // 源文件目錄 const sourceDir "file/"// 目標文件目錄 const destDir "det_file/"// 拿到目錄下完整的路徑 func geFiles…

Python數據科學視頻講解:數據挖掘與建模的注意事項

1.7 數據挖掘與建模的注意事項 視頻為《Python數據科學應用從入門到精通》張甜 楊維忠 清華大學出版社一書的隨書贈送視頻講解1.7節內容。本書已正式出版上市,當當、京東、淘寶等平臺熱銷中,搜索書名即可。內容涵蓋數據科學應用的全流程,包括…

sensitive word 敏感詞(臟詞) 如何忽略無意義的字符?達到更好的過濾效果?

忽略字符 說明 我們的敏感詞一般都是比較連續的,比如 傻帽 那就有大聰明發現,可以在中間加一些字符,比如【傻!#$帽】跳過檢測,但是罵人等攻擊力不減。 那么,如何應對這些類似的場景呢? 我們可以指定特…

CSS3技巧36:讓內容垂直居中的三種方式

讓內容垂直居中,是一個很重要的應用情景,在很多場合都會需要。這也是面試的時候,一些考官喜歡拿來初面的小題目。 這里,小結下讓內容垂直居中的三種方式。 當然,讀者如果有更好的方法,也可以提出來。 基本…

基于ssm技術的車庫智能管理平臺論文

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術,讓傳統數據信息的管理升級為軟件存儲,歸納,集中處理數據信息的管理方式。本車庫智能管理平臺就是在這樣的大環境下誕生,其可以幫助管理者在短時間內處理完畢龐大的數據信息…

【自定義Source、Sink】Flink自定義Source、Sink對redis進行讀寫操作

使用ParameterTool讀取配置文件 Flink讀取參數的對象 Commons-cli: Apache提供的,需要引入依賴ParameterTool:Flink內置 ParameterTool 比 Commons-cli 使用上簡便; ParameterTool能避免Jar包的依賴沖突 建議使用第二種 使用Par…

西工大網絡空間安全學院計算機網絡實驗五——ACL配置

實驗五、ACL配置 一. 實驗目的 1. 掌握ACL的基本配置方法 二. 實驗內容 1. 基于如下圖所示的拓撲圖,對路由器進行正確的RIP協議配置; ? 首先引入3臺2811 IOS15型號的路由器、3臺2950-T24型號的交換機、4臺PC-PT型號的PC機、兩臺Server-PT型號的服務…

kafka學習筆記--生產者消息發送及原理

本文內容來自尚硅谷B站公開教學視頻,僅做個人總結、學習、復習使用,任何對此文章的引用,應當說明源出處為尚硅谷,不得用于商業用途。 如有侵權、聯系速刪 視頻教程鏈接:【尚硅谷】Kafka3.x教程(從入門到調優…

JavaScript 的節流與防抖

// 函數防抖: 在事件被觸發 n 秒后再執行回調,如果在這 n 秒內事件又被觸發,則重新計時。// 函數節流: 規定一個單位時間,在這個單位時間內,只能有一次觸發事件的回調函數執行,如果在同一個單位…

Redis各種數據結構應用場景

Redis各種數據結構應用場景 一、基本類型 Redis的基本數據類型時,以下是它們的實際場景示例: 字符串(String): 實際場景 緩存數據:將頻繁訪問的數據緩存在Redis中,以提高讀取速度。會話管理&…

Ubuntu與Windows通訊傳輸文件(FTP服務器版)(沒用的方法,無法施行)

本文介紹再Windows主機上建立FTP服務器,并且在Ubuntu虛擬機上面訪問Windows上FTP服務器的方法 只要按照上圖配置就可以了 第二部:打開IIS管理控制臺 右擊網站,新建FTP站點。需要注意的一點是在填寫IP地址的時候,只需要填寫Window…

遙感衛星綜述(下載和預處理)(持續更新)

遙感衛星綜述(下載和預處理) 目錄 遙感衛星綜述(下載和預處理)一、國產衛星GF-1 WFV 二、國外衛星Sentinel-1Sentinel-2 一、國產衛星 GF-1 WFV 下載 分辨率波段16m4(藍、綠、紅、近紅) 預處理: ENVI預處理GF-1號W…

用友T3如何反結賬、反記賬、反審核及刪除憑證

在T3總賬中已經進行了總賬記賬和月末結賬,但是需要去修改憑證或刪除憑證,這個時候就需要去進行反結賬、反記賬等操作,以下是具體的操作流程 第一步、反結賬 1、進入用友T3件,打開總賬系統模塊,點月末結賬&#xff0c…

uc_15_TCP協議

1 TCP協議 TCP提供客戶機與服務器的鏈接。一個完整TCP通信過程需要經歷三個階段 1)首先,客戶機必須建立與服務器的連接,所謂虛電路 2)然后,憑借已建立好的連接,通信雙方相互交換數據 3)最后&am…

短信驗證碼無法獲取,通過獲取cookies直接登錄

web端,selenium短信驗證碼無法獲取,通過獲取cookies直接登錄 1,先獲取cookies driver webdriver.Chrome() driver.get("") driver.implicitly_wait(2) # 獲取彈窗,并取消 driver.find_element(By.XPATH,"/html/…

智能優化算法應用:基于粒子群算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用:基于粒子群算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用:基于粒子群算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.粒子群算法4.實驗參數設定5.算法結果6.參考文…

Python---異常的綜合案例

☆ 異常的傳遞 需求: ① 嘗試只讀方式打開python.txt文件,如果文件存在則讀取文件內容,文件不存在則提示用戶即可。 ② 讀取內容要求:嘗試循環讀取內容,讀取過程中如果檢測到用戶意外終止程序,則except捕…

個人博客網站如何實現https重定向(301)到http

對于個人網站站注冊比較少的,服務器配置不是很好的,沒必要https,https跳轉到http是要時間的,會影響網站打開的速度。免費的https每年都要更換。個人博客網站https有一段時間了,而且很多頁面都有收錄排名,現在已去掉htt…