环境准备

克隆虚拟机
重新生成mac地址
修改 主机名
vi /etc/hostname
修改 ip

  1. vi /etc/sysconfig/network-scripts/ifcfg-ens33
  2. TYPE="Ethernet"
  3. PROXY_METHOD="none"
  4. BROWSER_ONLY="no"
  5. BOOTPROTO="static"
  6. DEFROUTE="yes"
  7. IPV4_FAILURE_FATAL="no"
  8. IPV6INIT="yes"
  9. IPV6_AUTOCONF="yes"
  10. IPV6_DEFROUTE="yes"
  11. IPV6_FAILURE_FATAL="no"
  12. IPV6_ADDR_GEN_MODE="stable-privacy"
  13. NAME="ens33"
  14. DEVICE="ens33"
  15. ONBOOT="yes"
  16. #ip
  17. IPADDR="192.168.183.133"
  18. #网关
  19. GATEWAY="192.168.183.2"
  20. #使用主的DNS
  21. DNS1="192.168.183.2"
  22. IPV6_PRIVACY="no"
  23. reboot

shell 发送键输入到所有会话
image.png
安装docker,和单机一样
关闭防火墙
systemctl stop firewalld
//禁止开机启动
systemctl disable firewalld

工作模式

https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/
image.png

搭建集群

[root@zw ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
56fc502997e1        bridge              bridge              local
2e36e8f086e9        host                host                local
4558c2f06d6f        none                null                local
ip addr

docker swarm init --help
# 使用私网
# 初始化节点
docker swarm init --advertise-addr 192.168.183.131

image.png

docker swarm join #加入节点
# 获取令牌
docker swarm join-token manager
docker swarm join-token worker

docke02 加入docker01

docker swarm join --token SWMTKN-1-07d8cxt7g0p6lmodfp68zixt248gjhqwf2bm0em9nhei5s27hs-6684rgcywvusr1t8xocjgteyp 192.168.183.131:2377

image.png
docker01

docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
ln07n0lqfv9gi06uauirc7ht5 *   zw.docker01         Ready               Active              Leader              19.03.13
voukd2y58z1ywzhj3p1iv0a67     zw.docker02         Ready               Active                                  19.03.13

docker03 加入
可以复制上面命令,也可以生成命令

docker swarm join --token SWMTKN-1-07d8cxt7g0p6lmodfp68zixt248gjhqwf2bm0em9nhei5s27hs-6684rgcywvusr1t8xocjgteyp 192.168.183.131:2377

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
ln07n0lqfv9gi06uauirc7ht5 *   zw.docker01         Ready               Active              Leader              19.03.13
voukd2y58z1ywzhj3p1iv0a67     zw.docker02         Ready               Active                                  19.03.13
35keesegnbj533xsf4o0yez2a     zw.docker03         Ready               Active                                  19.03.13

docker04 加入成主节点

# docker01生成主节点令牌
docker swarm join-token manager

docker swarm join --token SWMTKN-1-07d8cxt7g0p6lmodfp68zixt248gjhqwf2bm0em9nhei5s27hs-1visd9p2lq4t9clb7t5rddmby 192.168.183.131:2377

# docker04执行
[root@zw ~]# docker swarm join --token SWMTKN-1-07d8cxt7g0p6lmodfp68zixt248gjhqwf2bm0em9nhei5s27hs-1visd9p2lq4t9clb7t5rddmby 192.168.183.131:2377
This node joined a swarm as a manager.

# docker01
[root@zw ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
ln07n0lqfv9gi06uauirc7ht5 *   zw.docker01         Ready               Active              Leader              19.03.13
voukd2y58z1ywzhj3p1iv0a67     zw.docker02         Ready               Active                                  19.03.13
35keesegnbj533xsf4o0yez2a     zw.docker03         Ready               Active                                  19.03.13
141lwpygsnid4l0699idar6ft     zw.docker04         Ready               Active              Reachable           19.03.13

# 目前双主双从

systemctl stop docker

raft算法

docker swarm leave --force
# 两个主节点,挂一个,整个集群不可用
# 3个主节点,挂一个, 两个主节点超过一办,集群可用

动态扩缩容

# docker run 容器。 docker service 服务,动态扩缩容
docker service create -p 8080:80 --name my-nginx nginx 
docker service ps my-nginx
docker service inspect my-nginx
# 增加至3个副本
docker service update --replicas 3 my-nginx
docker service scale my-nginx=5