-
Docker Swarm是docker官方三剑客项目之一,提供docker容器集群服务,是docker官方对容器云生态进行支持 的核心方案。使用它,用户可以将多个docker主机封装为单个大型的虚拟docker主机,快速打造一套容器云平台。
-
注意:docker 1.12.0+Swarm mode已经内嵌入docker引擎,成为了docker子命令docker swarm,绝大多数用户已经开始使用swarm mode,docker引擎API已经删除Docker Swarm。
-
基本概念
-
Swarm是使用SwarmKit构建的docker引擎内置(原生)的集群管理和编排工具。使用Swarm集群执勤啊需要了解如下几个概念:
-
节点
-
运行docker的主机可以主动初始化一个swarm集群或者加入一个已存在的swarm集群,这样这个运行docker的主机就称为一个swarm集群的节点。
-
节点分为管理节点和工作节点。管理节点用于swarm集群的管理,docker swarm命令基本只能在管理节点执行。工作节点是任务执行节点,管理节点将服务下发至工作节点执行。
-
集群中管理节点与工作节点的关系:
-
-
服务和任务
-
任务(Task)是swarm中的最小的调度单位,目前来说就是一个单一的容器。服务(Services)是指一组任务的集合,服务定义了任务的属性。
-
服务有两种模式:
- replicated services:按照一定规则在各个工作节点上运行指定个数的任务;
- global services:每个工作节点上运行一个任务。
-
两种模式通过
docker service create
的--mode
参数指定。 -
容器、任务、服务的关系:
-
-
-
创建swarm集群
-
了解swarm集群由管理节点和工作节点组成后,我们来创建一个包含一个管理节点和两个工作节点的最小swarm集群。
-
初始化集群
-
使用
docker swarm init
在本机初始化一个swarm集群docker swarm init --advertise-addr 192.168.100.249
如果你的docker主机有多个网卡,拥有多个IP,必须使用
--advertise-addr
指定IP。执行
docker swarm init
命令的节点自动成为管理节点。
-
-
增加工作节点
-
在另外两台服务器上执行上一步创建管理节点时输出的加入swarm集群的命令
docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.100.24:2377
-
-
查看集群
-
在管理节点使用
docker node ls
查看集群docker node ls
-
-
-
部署服务
-
使用
docker service
命令来管理swarm集群中的服务,该命令只能在管理节点上运行; -
新建服务
-
在创建好的swarm集群中运行一个名为nginx的服务。
docker service create --replicas 3 -p 80:80 --name nginx nginx:latest
现在我们使用浏览器,输入任意节点IP,即可看到nginx默认页面。
-
-
查看服务
-
使用
docker service ls
来查看当前swarm集群运行的服务docker service ls
使用
docker service ps
来查看某个服务的详情docker service ps nginx
使用
docker service logs
来查看某个服务的日志docker service logs nginx
-
-
删除服务
-
使用
docker service rm
来从swarm集群移除某个服务docker service rm nginx
-
-
-
资源管理
-
前面我们学过了利用docker swarm快速搭建一个最小集群,也可以在集群上部署服务,但是会发现swarm中并没有提供统一入口查看节点的资源使用情况。这个时候我们急切的希望有一个图形化管理工具来帮我们管理swarm集群,portainer就是这样的一个工具。
-
portainer是docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、swarm集群和服务等几种管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。
-
portainer集群运行
-
下载portainer镜像
# 查询当前有哪些portainer镜像 docker search portainer docker pull portainer/portainer
-
安装portainer
docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
-
-
portainer配置
-
转载于:https://my.oschina.net/zhangxufeng/blog/3077583