简介 Swarm是一套较为简单的工具,用以管理Docker集群,使得Docker集群暴露给用户时相当于一个虚拟的整体。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in go, docker_py, docker等)均可以直接与Swarm通信。 使用etcd发现服务解决swarm内置发现服务的不稳定问题。etcd是一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。 etcd是一个服务发现系统,具备以下的特点:安装配置简单,而且提供了HTTP API进行交互,使用也很简单,支持SSL证书验证,根据官方提供的benchmark数据,单实例支持每秒2k+读操作,采用raft算法,实现分布式系统数据的可用性和一致性 Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。 服务器 192.168.0.98 master docker etcd swarm-manage swarm-agent portainer 192.168.0.99 node1 docker swarm-agent 192.168.0.100 node2 docker swarm-agent 准备 在所有机器上安装docker同时修改配置 vi /lib/systemd/system/docker.service 修改 ExecStart: ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -D -H tcp://0.0.0.0:2375 重启docker systemctl daemon-reload systemctl start docker.service 当然实际用于生产环境这种方式并不安全,可用于测试。新版本doker swarm 支持TSL安全方式。 在所有机器上docker pull swarm 在master机器上docker pull etcd 安装etcd docker run -ti -d -p 4001:4001 -p 7001:7001 --restart=always --name discovery docker.io/etcd -name discovery 启动swarm manger docker run -ti -d -p 2376:2375 --restart=always --name swarm-manager swarm:latest manage --host tcp://0.0.0.0:2375 etcd://192.168.0.98:4001 启动swarm agent 在每个docker节点分别执行,将当前docker节点加入到集群中: docker run -ti -d --restart=always --name swarm-agent swarm:latest join --addr 192.168.0.98:2375 etcd://192.168.139.98:4001 docker run -ti -d --restart=always --name swarm-agent swarm:latest join --addr 192.168.0.99:2375 etcd://192.168.139.98:4001 docker run -ti -d --restart=always --name swarm-agent swarm:latest join --addr 192.168.0.100:2375 etcd://192.168.139.98:4001 使用命令查看docker节点情况(任意docker节点上都可以执行): docker run --rm swarm list etcd://192.168.0.98:4001 可以使用命令查看docker集群的详情(可在任意docker节点上执行,IP地址是装了swarm master主机的IP):
docker -H 192.168.0.98:2376 info
安装portainer(官方部署) docker run -d -p 9000:9000portainer/portainer -H tcp://<REMOTE_HOST>:<REMOTE_PORT> --swarm 或者 docker service create --name portainer \ --publish 9000:9000 \ --constraint 'node.role == manager' \ --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock\ portainer/portainer \ --swarm