docker swarm

一、环境准备 1.准备好四台服务器 docker1(192.168.0.10)、docker2(192.168.0.11)、docker3(192.168.0.13)、docker4(192.168.0.14) 2.安装docker #参考文档:官网 #地址:https://docs.docker.com/engine/install/centos/ 注由于4台机器都要安装我们需要用到xshell的小技巧如下: 点击发送到所有会话。 docker swarmdocker swarm

工作模式

https://docs.docker.com/engine/reference/commandline/swarm/   docker swarmdocker swarm 注:操作都在manager 搭建集群:  docker swarmdocker swarmdocker swarmdocker swarmdocker swarmdocker swarm 地址:公网   内网   [root@docker1 ~]# docker swarm init --advertise-addr 192.168.0.10 docker swarmdocker swarm 初始化节点: docker swarm init 加入一个节点:docker swarm join  #获取令牌 docker swarm join-token manager docker swarm join-token worker 吧docker2加入docker1 [root@docker2 ~]# docker swarm join      --token SWMTKN-1-3u6cnjv3o8ntnxylrc5tntrm8bvtko5jzg8g3umbddtjxczflc-4xvt57zk562y77omphdm6fq4f     192.168.0.10:2377 docker swarmdocker swarm 查看列出群组中的节点 [root@docker1 ~]# docker node ls  docker swarmdocker swarm 把docker3加入节点 [root@docker3 ~]# docker swarm join      --token SWMTKN-1-3u6cnjv3o8ntnxylrc5tntrm8bvtko5jzg8g3umbddtjxczflc-4xvt57zk562y77omphdm6fq4f     192.168.0.10:2377 This node joined a swarm as a worker.   docker swarmdocker swarm 把docker4加入主节点 1.创建主节点令牌 [root@docker1 ~]# docker swarm join-token manager docker swarmdocker swarm 2.把docker4加入主节点 [root@docker4 ~]# docker swarm join     --token SWMTKN-1-3u6cnjv3o8ntnxylrc5tntrm8bvtko5jzg8g3umbddtjxczflc-dfj1fe83a5uwnjhpb0etanwh9     192.168.0.10:2377 This node joined a swarm as a manager. 3.查看 [root@docker1 ~]# docker node ls docker swarmdocker swarm raft协议 双重双主:假设一个节点挂了,其它节点是否可用 raft协议:保证大多数节点存活才可以用。只要>1,集群至少大于三台 实验: 将ocker1机器停止,宕机,由于我们现在是双主结构,另外一个节点也不能使用了! [root@docker1 ~]# systemctl stop docker.service [root@docker4 ~]# docker node ls Error response from daemon: rpc error: code = 2 desc = raft: no elected cluster leader 启动docker1后正常 [root@docker1 ~]# docker node ls ID                           HOSTNAME  STATUS   AVAILABILITY  MANAGER STATUS 01a0568r7nja4roc6n4x0i1ji    docker3   Ready    Active         4xzwtgsmkpgu9yjv7x7xpt54k    docker4   Unknown  Active        Leader abd2mw7cn4c0lq5bxgrlhs4tx    docker2   Unknown  Active         ez0d73ul2uf6c18m4fnausdin *  docker1   Ready    Active        Reachable 将docker3移除节点 [root@docker3 ~]# docker swarm leave Node left the swarm. docker swarmdocker swarm 主要保证集群可用至少要保证三个主节点,>1太管理节点存活 删除节点前,需先停该节点的docker服务 docker node rm  [hostname] 体会 弹性、扩缩容、集群 以后告别docker run! docker-compose up! 启动一个项目单机 集群 swarm docker service 容器=》服务=》副本 体验:创建服务、动态扩展服务、动态更新服务 docker swarmdocker swarm 灰度发布:金丝雀发布! [root@docker1 ~]# docker service create -p 8888:80 --name my-nginx nginx 3jscijnxvaihuc1zm138tde0v docker  run  容器启动!不具有扩缩容功能 docker service 服务! 具有扩缩容、滚动更新 [root@docker1 ~]# docker service ps my-nginx ID                         NAME        IMAGE  NODE     DESIRED STATE  CURRENT STATE          ERROR a73nmtzy9w0xvpzjlu7aj36me  my-nginx.1  nginx  docker2  Running        Running 2 minutes ago   查看服务 docker swarmdocker swarm 动态扩缩容 [root@docker1 ~]# docker service update --replicas 3 my-nginx 查看结果 [root@docker2 ~]# docker ps CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES 503b07b909b8        nginx:latest        "/docker-entrypoint.s"   11 minutes ago      Up 11 minutes       80/tcp              my-nginx.1.a73nmtzy9w0xvpzjlu7aj36me [root@docker3 ~]# docker ps CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES 6631aff5eb4d        nginx:latest        "/docker-entrypoint.s"   3 minutes ago       Up 3 minutes        80/tcp              my-nginx.3.2s58g5mtl6oig7gcs4kq6hdvb [root@docker3 ~]# [root@docker4 ~]# docker ps CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES 44b2a002cf6e        nginx:latest        "/docker-entrypoint.s"   5 seconds ago       Up 4 seconds        80/tcp              my-nginx.2.brddytptvq2tpq0thag1rmz8v 服务,集群中任意的节点都可以访问,服务可以有多个副本 [root@docker1 ~]# docker service update --replicas 50  my-nginx 可以加很多个(随机分配) [root@docker1 ~]# docker service update --replicas 1  my-nginx  也可以瞬间把很多个副本缩小为一个 弹性、扩缩容,实现服务高可用,任何服务、云 [root@docker1 ~]# docker service scale my-nginx=5 扩容5份跟上面命令一样   [root@docker1 ~]# docker node rm docker   移除服务 docker swarm 其实并不难,只要会搭建集群,动态管理容器就可以了 概念总结 swarm 集群的管理和标号。docker可以初始化一个swarm集群,其他节点可以加入(管理、工作) service 任务,可以在管理节点或者工作节点来运行,核心,用户访问 docker swarmdocker swarm 逻辑是不变的:命令->管理->api->调度->工作节点(创建Task容器维护创建)      
上一篇:深入浅出Java性能调优,rabbitmq原理总结


下一篇:Docker swarm集群增加节点和删除节点