一、什么是docker swarm?
docker swarm是docker官方提供的一款集群管理工具,其主要作用是把若干臺docker主機抽象為一個整體,并且通過一個入口統一管理這些docker主機上的各種docker資源。swarm和kubernetes比較類似,但是更加輕,具有的功能也較kubernetes更少一些。
docker swarm 和 docker compose 一樣,都是 docker 官方容器編排項目,但不同的是,docker compose 是一個在單個服務器或主機上創建多個容器的工具,而 docker swarm 則可以在多個服務器或主機上創建容器集群服務,對于微服務的部署,顯然 docker swarm 會更加適合。
從 docker 1.12.0 版本開始,docker swarm 已經包含在 docker 引擎中(docker swarm),并且已經內置了服務發現工具,我們就不需要像之前一樣,再配置 etcd 或者 consul 來進行服務發現配置了。
二、docker swarm的體系架構
這個圖作為一個整體實際上都處于一個所謂的集群中,它可能對應了一到多臺的實際服務器。每臺服務器上都裝有docker并且開啟了基于http的dockerapi。這個集群中有一個swarmmanager的管理者,用來管理集群中的容器資源。管理者的管理對象不是服務器層面而是集群層面的,也就是說通過manager,我們只能籠統地向集群發出指令而不能具體到某臺具體的服務器上要干什么(這也是swarm的根本所在)。至于具體的管理實現方式,manager向外暴露了一個http接口,外部用戶通過這個http接口來實現對集群的管理。對于稍微大一點的集群,最好是拿出一臺實際的服務器作為專門的管理者,作為學習而言,也可以把管理者和被管理者放在一臺服務器上。
三、docker swarm服務的滾動更新
docker swarm可以實現服務平滑升級,即服務不停機更新,客戶端無感知。下面我們通過一個具體的例子,來為大家演示。這里我們將部署一個基于nginx的web應用程序服務,部署在node節點上。我們將創建同一個應用的兩個版本:version 1和 version 2
創建一個dockerfile,并使用docker build進行編譯。
1
2
|
from nginx run echo '<h1>swarm:version 1 <h1>' > /usr/share/nginx/html/index .html |
注意:為了使得swarm集群中的每個節點都能訪問到鏡像,我們這里把生成的鏡像上傳到自己的鏡像倉庫中。
1
2
3
|
docker login docker build -t collenzhao /mynginx :v1 . docker push collenzhao /mynginx :v1 |
創建swarm的服務,即:通過鏡像啟動容器
1
|
docker service create -p 7788:80 --replicas 3 --name myswarmtest collenzhao /mynginx :v1 |
通過docker service ls查看部署的服務。
通過docker service ps myswarmtest查看部署服務的詳細信息
效果如下圖所示
更新之前的dockerfile,注意版本號變為:2
1
2
|
from nginx run echo '<h1>swarm:version 2 <h1>' > /usr/share/nginx/html/index .html |
使用docker build進行編譯
1
|
docker build -t collenzhao /mynginx :v2 . |
使用docker push上傳到docker hub
1
|
docker push collenzhao /mynginx :v2 |
更新之前在swarm部署的服務,版本號變成了2
1
|
docker service update --image collenzhao /mynginx :v2 myswarmtest |
效果如下如所示
到此這篇關于docker swarm實現服務的滾動更新的示例代碼的文章就介紹到這了,更多相關docker swarm 滾動更新內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://segmentfault.com/a/1190000022502539