6.搭建swarm集群 && 安装visualizer可视化集群上的容器
1.准备三台机器,安装好docker并配置好加速后备用:192.168.100.62(manager62),192.168.100.63(node63),192.168.100.64(node64)
2.关闭防火墙,设置主机名,配置host,重启docker
# 192.168.100.62上执行 systemctl stop firewalld.service systemctl disable firewalld.service hostnamectl set-hostname manager62 echo "192.168.100.62 manager62" >> /etc/hosts echo "192.168.100.63 node63" >> /etc/hosts echo "192.168.100.64 node64" >> /etc/hosts sudo systemctl restart docker # 192.168.100.63上执行 systemctl stop firewalld.service systemctl disable firewalld.service hostnamectl set-hostname node63 echo "192.168.100.62 manager62" >> /etc/hosts echo "192.168.100.63 node63" >> /etc/hosts echo "192.168.100.64 node64" >> /etc/hosts sudo systemctl restart docker # 192.168.100.64上执行 systemctl stop firewalld.service systemctl disable firewalld.service hostnamectl set-hostname node64 echo "192.168.100.62 manager62" >> /etc/hosts echo "192.168.100.63 node63" >> /etc/hosts echo "192.168.100.64 node64" >> /etc/hosts sudo systemctl restart docker
3.在62上创建swarm主节点
docker swarm init --advertise-addr 192.168.100.62
4.在63,64上执行上面截图中标黄的命令。
5.执行 docker info 可以查看swarm信息
6.通过 docker node ls 可以查看swarm节点信息
7.节点下线 docker node update --availability drain node63
8.节点上线 docker node update --availability active node63
在Swarm中部署服务(nginx为例):
1.创建网络 docker network create -d overlay nginx_net 查看命令是 docker network ls | grep nginx_net
2.部署 docker service create --replicas 1 --network nginx_net --name my_nginx -p 80:80 nginx # 就创建了一个具有一个副本(--replicas 1 )的nginx服务,使用镜像nginx
3.查看正在运行的服务列表 docker service ls
4.查看服务运行在哪些节点 docker service ps my_nginx
5.动态扩展服务数量 docker service scale my_nginx=4
6. 动态缩容服务 docker service scale my_nginx=1
7.除了使用scale,还可以update第2步指定的实例数 docker service update --replicas 3 my_nginx 也可以更新启动参数
8.update 还可以升级镜像 docker service update --image nginx:new my_nginx
9.如果worker结点挂掉,worker节点上的容器会被转移到其他节点,保证节点的数量。当节点恢复后节点还会转移回来。
可选安装visualizer可视化已经启动的docker容器,github地址在这里,上面有详尽的文档
docker run -d -p 8081:8080 --name visualizer \ --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ dockersamples/visualizer
推荐安装portainer
docker run -d -p 9000:9000 --restart=always --name prtainer-test docker.io/portainer/portainer
对于swarm集群中的每个节点如果想要被portainer连接上需要修改/lib/systemd/system/docker.service,

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
然后重启docker服务 systemctl daemon-reload && systemctl restart docker
最后鸣谢参考文档
补充1:(如何加入集群,以worker 或者以 manager 的身份加入)
docker swarm join-token manager #在mananger节点上执行,执行结果为,加入当前swarm节点作为一个manager节点的命令。
docker swarm join-token worker #在mananger节点上执行,执行结果为,加入当前swarm节点作为一个work节点的命令。
补充2:(关于如何更新由docker stack部署的服务中的配置文件问题)
#docker config create 新的配置文件名字 dockerhost上面配置文件的路径(不是容器内的路径)
docker config create elk_logstash_pipeline2 /data/project/docker-elk/logstash/pipeline/logstash.conf
#先删除,再添加
#source就是上一步新建立的配置文件名称
#target就是容器内的文件路径
docker service update \
--config-rm elk_logstash_pipeline \
--config-add source=elk_logstash_pipeline2,target=/usr/share/logstash/pipeline/logstash.conf \
elk_logstash