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