写在前面的话
至此,docker 的基础知识已经了解的差不多了,接下来就来谈谈对于 docker 容器,我们如何来管理它。
docker swarm
在学习 docker swarm 之前,得先知道容器编排工具的作用:提供了基于容器调度和集群的技术,并编排他们以决定容器之间如何进行交互。
docker swarm 不是唯一的容器编排工具,但却是 docker 自带的容器编排工具。
可以看看它的主要结构(图片来自互联网):
docker swarm 以集群的形式运行,包括两个角色:Manager 和 worker。
Manager 是 swarm 的集群的核心,所以一般会有多个,而且建议是奇数个,避免出现脑裂的情况。
多个 Manager 之间通过 Raft 协议进行信息同步。
Worker 就是干活的节点,节点之间通过 GOSS 网络进行信息同步。
Service 和 Replicas:每一个应用就是一个 Service,而每一次该应用的运行就是 Replicas。
创建 docker swarm
准备 3 台虚拟机:
IP | 主机名 | 说明 |
---|---|---|
192.168.100.100 | docker-node1 | Manager |
192.168.100.101 | docker-node2 | Worker |
192.168.100.102 | docker-node3 | Worker |
初始化 Manager 节点并将两个 Worker 节点加入:
node1 执行:
docker swarm init --advertise-addr=192.168.100.100
结果如图:
复制红色部分到另外两个节点执行!
node2 和 node3 执行:
docker swarm join --token SWMTKN-1-4423bymu0axfzp7cr1df6jjq36d5errbhetzlg3zz722lzt2j5-4nopnics4j267mh1gidf8z7nm 192.168.100.100:2377
结果如图:
在 node1 节点上查看 Swarm 信息:
docker node ls
结果如图:
类似相关集群的命令在 Worker 节点上执行一般都会报错:
This node is not a swarm manager
常见错误:
1. 初始化或者加错了节点想退出:
docker swarm leave --force
2. node2 和 node3 加入 swarm 时候报错:
Error response from daemon: error while validating Root CA Certificate: x509: certificate has expired or is not yet valid
这种问题一般是几台服务器的时间不一致,同步下时间一般就好了:
yum -y install ntp ntpdate -u ntp.api.bz
3. node2 和 node3 加入 swam 很久没反应,报错:
connect: no route to host
这种问题一般是防火墙原因,关闭服务器的防火墙即可:
systemctl stop firewalld.service
systemctl disable firewalld.service
操作 docker swarm
在 docker swarm 中,命令都是基于 service 运行,而且所有服务都是运行在 Manager 节点。
【1】创建运行容器:
docker service create --name demo busybox sh -c "while true;do sleep 300; done"
【2】查看运行信息:
docker service ls
结果如图:
【3】查看该容器运行在哪个节点:
docker service ps demo
结果如图:
通过 create 时候的名字查找,但这个名字并不是容器名字。
【4】将容器运行多个节点:
docker service scale demo=3
查看:
docker service ps demo
结果如图:
可以看到,3个容器被平均分配到了各个节点。
【5】删除容器: