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的小技巧如下:
点击发送到所有会话。
工作模式
https://docs.docker.com/engine/reference/commandline/swarm/ 注:操作都在manager 搭建集群: 地址:公网 内网 [root@docker1 ~]# docker swarm init --advertise-addr 192.168.0.10 初始化节点: 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 查看列出群组中的节点 [root@docker1 ~]# docker node ls 把docker3加入节点 [root@docker3 ~]# docker swarm join --token SWMTKN-1-3u6cnjv3o8ntnxylrc5tntrm8bvtko5jzg8g3umbddtjxczflc-4xvt57zk562y77omphdm6fq4f 192.168.0.10:2377 This node joined a swarm as a worker. 把docker4加入主节点 1.创建主节点令牌 [root@docker1 ~]# docker swarm join-token manager 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 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. 主要保证集群可用至少要保证三个主节点,>1太管理节点存活 删除节点前,需先停该节点的docker服务 docker node rm [hostname] 体会 弹性、扩缩容、集群 以后告别docker run! docker-compose up! 启动一个项目单机 集群 swarm docker service 容器=》服务=》副本 体验:创建服务、动态扩展服务、动态更新服务 灰度发布:金丝雀发布! [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 查看服务 动态扩缩容 [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 任务,可以在管理节点或者工作节点来运行,核心,用户访问 逻辑是不变的:命令->管理->api->调度->工作节点(创建Task容器维护创建)标签:docker1,nginx,swarm,docker,root,节点 来源: https://www.cnblogs.com/momo6656/p/15352888.html