Docker Swarm介绍及使用入门
Docker Swarm是管理跨节点容器的编排工具,相较于Docker Compose而言,Compose只能编排单节点上的容器,Swarm将一群Docker节点虚拟化为一个主机,使得用户只要在单一主机上操作就能完成对整个容器集群的管理工作。如果下载的1.12.x版本之后Docker,那么Swarm就已经被包含在内了,无需再安装。
Docker Swarm架构包含两种角色,manager和node,前者是Swarm Daemon工作的节点,包含了调度器、路由、服务发现等功能,负责接收客户端的集群管理请求,然后调度Node进行具体的容器工作,比如容器的创建、扩容与销毁等。 manager本身也是一个node。
通常情况下,为了集群的高可用,manager个数>=3的奇数,node的个数则是不限制。
创建集群
docker swarm init --advertise-addr ip # 创建swarm 集群,设置 manager节点和通信ip
[root@manager ~]# docker swarm init --advertise-addr 172.22.147.207
Swarm initialized: current node (s0eoali1x32ly22jo85ebeb0w) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-57msikozxxt44uxz5r8hihmakp4zh1cr89v7zlxhyc8b5iojkt-5ea8uh68jcuy8m6f9ma7x0zg5 172.22.147.207:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
如上就完成了manager节点的设置,并且得到提示信息如下:
- 可以在其它节点上执行
docker swarm join --token......
来将该节点设置为工作node,并加入到这个swarm集群中; - 可以在其它节点上执行
docker swarm join-token manager
来获取下一步执行指令,执行该指令后,该节点将设置为manager从节点加入到这个swarm集群中;
我们目前演示的是一个manager,两个工作node的模式,所以在另外两台node1和node2上执行第一个命令即可完成一个swarm 集群的搭建
使用集群
注意事项:
manager是管理集权的入口,docker命令都是在manager上执行,node节点上不能执行docker命令
命令介绍
docker node ls # 查看集群中的节点信息
docker network create -d overlay niginx_network
# 创建一个名为niginx_network的Docker overlay网络。
Docker支持以下网络类型:
1. 桥接(Bridge)网络:默认的Docker网络,适用于单节点的Docker主机。
2. 主机(Host)网络:容器加入到主机网络中,与主机共享网络命名空间和网络接口。
3. 网络(Network)网络:容器加入到指定的用户定义网络中,不同的容器可以互相通信。
4. None网络:容器没有网络连接,可用于一些特殊场景。
5. MACVLAN网络:在物理网卡上创建多个虚拟MAC地址以模拟多个网络接口,将容器关联到指定的虚拟MAC地址,实现容器之间网络隔离和安全性。
6. Overlay网络:适用于多节点Docker集群,提供跨主机的容器通信能力,使用VXLAN实现容器之间的通信。
docker service create --replicas 1 --network niginx_network --name my_nginx -p 80:80 nginx:latest
# 使用nginx:latest镜像创建了一个容器,容器名称为my_nginx,对外暴露80端口;
docker service ls # 查看允许的服务列表
docker service ps my_nginx # 查看服务在那个节点运行
docker service scale my_nginx=4 # 动态扩缩容容器个数
docker service update --replicas 3 my_nginx # 动态扩缩容容器个数
docker service rm my_nginx # 移除该任务的所有容器
docker node update --availability drain node2 # 下线某个节点
# 如果某个节点被设置下线,或者因为其它故障宕机了,那么它其上的容器会被转移到其它可运行的节点上,如此来保证始终有指定副本数量的容器在运行。
docker node update --availability active node2 # 上线某个节点
docker swarm leave # 节点离开swarm集群 当最后一个manager节点离开,则swarm集群自动删除。
docker swarm leave # 删除swarm集群