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 來進行服務發現配置了。html
這個圖做爲一個總體實際上都處於一個所謂的集羣中,它可能對應了一到多臺的實際服務器。每臺服務器上都裝有Docker而且開啓了基於HTTP的DockerAPI。這個集羣中有一個SwarmManager的管理者,用來管理集羣中的容器資源。管理者的管理對象不是服務器層面而是集羣層面的,也就是說經過Manager,咱們只能籠統地向集羣發出指令而不能具體到某臺具體的服務器上要幹什麼(這也是Swarm的根本所在)。至於具體的管理實現方式,Manager向外暴露了一個HTTP接口,外部用戶經過這個HTTP接口來實現對集羣的管理。對於稍微大一點的集羣,最好是拿出一臺實際的服務器做爲專門的管理者,做爲學習而言,也能夠把管理者和被管理者放在一臺服務器上。node
Docker Swarm能夠實現服務平滑升級,即服務不停機更新,客戶端無感知。下面咱們經過一個具體的例子,來爲你們演示。這裏咱們將部署一個基於nginx的web應用程序服務,部署在node節點上。咱們將建立同一個應用的兩個版本:version 1和 version 2nginx
FROM nginx RUN echo '<h1>Swarm:Version 1 <h1>' > /usr/share/nginx/html/index.html
注意:爲了使得Swarm集羣中的每一個節點都能訪問到鏡像,咱們這裏把生成的鏡像上傳到本身的鏡像倉庫中。web
docker login docker build -t collenzhao/mynginx:v1 . docker push collenzhao/mynginx:v1
docker service create -p 7788:80 --replicas 3 --name myswarmtest collenzhao/mynginx:v1
FROM nginx RUN echo '<h1>Swarm:Version 2 <h1>' > /usr/share/nginx/html/index.html
docker build -t collenzhao/mynginx:v2 .
docker push collenzhao/mynginx:v2
docker service update --image collenzhao/mynginx:v2 myswarmtest