目录
一、什么是Docker Swarm?
二、Swarm的几个相关概念
1.Swarn
2.Node
3.Service
4.Task
三、Docker Swarm集群的部署
1.准备工作
2.创建Swarm并添加结点
3.Swarm中部署一个nginx服务
4.Swarm中使用Volume
5.Swarm集群多服务部署
6.测试部署的服务
一、什么是Docker Swarm?
doker swarm和docker compose都是容器编排工具,docker compose是一个在单个服务器或主机上创建并管理多个容器的工具,而docker swarm则可以在多个服务器或主机上创建容器集群的服务器。
二、Swarm的几个相关概念
1.Swarn
集群的管理和编排是使用嵌入docker引擎的SwarmKit,可以在docker初始化时启动swarm模式或者加入已存在的swarm
2.Node
一个node就是swarm里的一个实例,也就是一台服务器Node里又有manager节点和worker节点,manager节点是管理节点。它的主要功能是分配工作任务,编排和管理集群。worker节点就是工作节点,它的主要功能就是完成管理节点分配的工作任务。
3.Service
一个服务是工作节点上执行任务的定义。创建一个服务,就指定了容器所使用的镜像和容器运行的命令。
4.Task
任务是在docker容器中执行的命令,Manger节点根据指定数量的任务副本分配任务给worker节点
三、Docker Swarm集群的部署
1.准备工作
1.修改IP和主机名
准备三天centos系统的虚拟机
IP:192.168.1.230 主机名:manager 角色:swarm manager
IP:192.168.1.231 主机名:worker1 角色:swarm node
IP:19.168.1.232 主机名:worker2 角色:swarm node
2.配置hosts文件
[root@manager ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.230 manager
192.168.10.231 worker1
192.168.10.232 worker2
[root@manager ~]# scp /etc/hosts root@192.168.10.231:/etc/hosts
[root@manager ~]# scp /etc/hosts root@192.168.10.232:/etc/hosts
3.关闭防火墙和selinux,三台机器都需要关闭
#关闭防火墙
[root@manager ~]# service firewalld stop
#设置开机不启动防火墙
[root@manager ~]# systemctl disable firewalld
#关闭selinux
[root@manager ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
#修改selinux需要重启服务
[root@manager ~]# reboot
4.三台机器都安装docker
[root@manager ~]# yum install docker -y
[root@worker1 ~]# yum install docker -y
[root@worker2 ~]# yum install docker -y
2.创建Swarm并添加结点
1.在manager机器上部署集群
[root@manager ~]# docker swarm init --advertise-addr 192.168.10.230
Swarm initialized: current node (maxo4dbrhl6m2lzwegue8ciyp) is now a manager.
To add a worker to this swarm, run the following command:
#添加节点的方式,在节点加入时要使用token作为密钥
docker swarm join --token SWMTKN-1-4zcmda7xw3dbxo0w1huk9krj49hp1mpz4xodlu4uixocene58n-ee9gocel9cjaw33no906ibf0b 192.168.10.230:2377
2.添加节点到swarm集群
[root@worker1 ~]# docker swarm join --token SWMTKN-1-4zcmda7xw3dbxo0w1huk9krj49hp1mpz4xodlu4uixocene58n-ee9gocel9cjaw33no906ibf0b 192.168.10.230:2377
This node joined a swarm as a worker.
[root@worker2 ~]# docker swarm join --token SWMTKN-1-4zcmda7xw3dbxo0w1huk9krj49hp1mpz4xodlu4uixocene58n-ee9gocel9cjaw33no906ibf0b 192.168.10.230:2377
This node joined a swarm as a worker.
3.显示swarm集群中的节点
[root@manager ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
maxo4dbrhl6m2lzwegue8ciyp * manager Ready Active Leader 20.10.8
6tj7ajbbkoa4lphjiiahcuafm worker1 Ready Active 20.10.8
ruk7jvg2gao7boih2u2lw6s1l worker2 Ready Active 20.10.8
4.worker结点退出集群
[root@worker1 ~]# docker swarm leave -f
5.manager结点解散集群
[root@manager ~]# docker swarm leave -f
3.Swarm中部署一个nginx服务
1.创建网络
[root@manager ~]# docker network create -d overlay sc_nginx
zafpl1jg200g8ojqd48nwe8vj
[root@manager ~]# docker network ls|grep sc_nginx
zafpl1jg200g sc_nginx overlay swarm
2.部署服务
[root@manager ~]# docker service create --replicas 10 --network sc_nginx --name sc_nginx -p 8886:80 nginx
twl33bdu1cx8x2ikcmwnfu23o
overall progress: 10 out of 10 tasks
1/10: running
2/10: running
3/10: running
4/10: running
5/10: running
6/10: running
7/10: running
8/10: running
9/10: running
10/10: running
verify: Service converged
3.查看正在运行的服务
[root@manager ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
twl33bdu1cx8 sc_nginx replicated 10/10 nginx:latest *:8886->80/tcp
4.查看服务的详细的详细
[root@manager ~]# docker service inspect sc_nginx
5.查看哪些节点运行了哪些容器
[root@manager ~]# docker service ps sc_nginx
6.扩展容器到20个
[root@manager ~]# docker service scale sc_nginx=20
7.查看各结点运行的容器
[root@manager ~]# docker ps
[root@worker1 ~]# docker ps
[root@worker2 ~]# docker ps
8.镜像升级
[root@manager ~]# docker service update --image nginx:latest sc_nginx
9.删除服务
[root@manager ~]# docker service rm sc_nginx
4.Swarm中使用Volume
#创建一个volume
[root@manager ~]# docker volume create --name swarm-volume
swarm-volume
#查看创建的volume
[root@manager ~]# docker volume ls
local swarm-volume
#查看volume的详细信息
[root@manager ~]# docker volume inspect swarm-volume
[
{
"CreatedAt": "2021-08-29T10:19:03+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/swarm-volume/_data",
"Name": "swarm-volume",
"Options": {},
"Scope": "local"
}
]
#修改volume的信息
[root@manager _data]# cd /var/lib/docker/volumes/swarm-volume/_data
[root@manager _data]# ls
[root@manager _data]# vim index.html
[root@manager _data]# cat index.html
welcome to liu's website!
#创建服务并挂载创建的volume
[root@manager ~]# docker service create --replicas 10 --mount type=volume,src=swarm-volume,dst=/usr/share/nginx/html --name sc_nginx2 -p 8887:80 nginx
n743dnbogi5qkq9r4gmeb06w6
overall progress: 10 out of 10 tasks
1/10: running
2/10: running
3/10: running
4/10: running
5/10: running
6/10: running
7/10: running
8/10: running
9/10: running
10/10: running
verify: Service converged
[root@manager ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
n743dnbogi5q sc_nginx2 replicated 10/10 nginx:latest *:8887->80/tcp
#linux里访问网站
[root@manager ~]# curl 192.168.10.230:8887
welcome to liu's website!
5.Swarm集群多服务部署
#编写docker-compose.yml文件
[root@manager ~]# mkdir /swarm
[root@manager ~]# cd /swarm/
#上面两步不是必须的
[root@manager swarm]# vim docker-compose.yml
[root@manager swarm]# cat docker-compose.yml
version: "3"
services:
sc-nginx: #服务的名字
image: nginx
ports:
- 8888:80
deploy:
mode: replicated
replicas: 3 #副本数量
sc-redis:
image: redis
ports:
- 8379:6379
deploy:
mode: replicated
replicas: 3
#通过docker-compose.yml文件部署服务
#docker stack deploy部署服务的
[root@manager swarm]# docker stack deploy -c docker-compose.yml deploy_deamon
Creating network deploy_deamon_default
Creating service deploy_deamon_sc-redis
Creating service deploy_deamon_sc-nginx
[root@manager swarm]# docker stack ls
NAME SERVICES ORCHESTRATOR
deploy_deamon 2 Swarm
#查看创建的服务
[root@manager swarm]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
0u9mhyag5tky deploy_deamon_sc-nginx replicated 3/3 nginx:latest *:8888->80/tcp
6fomk1oouoo7 deploy_deamon_sc-redis replicated 3/3 redis:latest *:8379->6379/tcp
n743dnbogi5q sc_nginx2 replicated 10/10 nginx:latest *:8887->80/tcp