1、工作原理
操作都在管理节点上
2、搭建集群
四台虚拟机
将108初始化docker swarm
# 108
[root@localhost ~]# docker swarm init --advertise-addr 192.168.0.108
将107作为worker将入docker swarm
# 107
[root@localhost ~]# docker swarm join --token SWMTKN-1-0l21o6scw8u9xlmps0l20znvudzs7qj9jakevoz8dq2r6eh45i-8i9he7nhiwulq75zts3wfewe3 192.168.0.108:2377
This node joined a swarm as a worker.
[root@localhost ~]#
# 加入swarm集群
docker swarm join
docker swarm join-token manager
docker swarm join-token worker
查看节点
# 108
[root@localhost ~]# docker node ls
将105和106作为mannger加入集群
#在108中执行
[root@localhost ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-0l21o6scw8u9xlmps0l20znvudzs7qj9jakevoz8dq2r6eh45i-awg78oflwkajp24b1k9xgu9rl 192.168.0.108:2377
# 105,106
[root@localhost ~]# docker swarm join --token SWMTKN-1-0l21o6scw8u9xlmps0l20znvudzs7qj9jakevoz8dq2r6eh45i-awg78oflwkajp24b1k9xgu9rl 192.168.0.108:2377
This node joined a swarm as a manager.
[root@localhost ~]#
3、Raft协议
保证大多数节点存活才有用,集群至少大于3台
4、docker swarm弹性创建服务
[root@localhost ~]# docker service --help
Usage: docker service COMMAND
Manage services
Commands:
create Create a new service
inspect Display detailed information on one or more services
logs Fetch the logs of a service or task
ls List services
ps List the tasks of one or more services
rm Remove one or more services
rollback Revert changes to a service's configuration
scale Scale one or multiple replicated services
update Update a service
Run 'docker service COMMAND --help' for more information on a command.
[root@localhost ~]#
创建服务
[root@localhost ~]# docker service create -p 8888:80 --name my-nginx nginx
yzljt5muec50n2qkh87pp0lh6
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
[root@localhost ~]
查看服务
[root@localhost ~]# docker service ps my-nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
tjiw97vmok5m my-nginx.1 nginx:latest localhost.localdomain Running Running about a minute ago
[root@localhost ~]#
更新服务
[root@localhost ~]# docker service update --help
# replicas 副本
[root@localhost ~]# docker service update --replicas 3 my-nginx
my-nginx
overall progress: 3 out of 3 tasks
1/3: running [==================================================>]
2/3: running [==================================================>]
3/3: running [==================================================>]
verify: Service converged
[root@localhost ~]#
或者用docker service scale
[root@localhost ~]# docker service scale my-nginx=5
my-nginx scaled to 5
overall progress: 5 out of 5 tasks
1/5: running [==================================================>]
2/5: running [==================================================>]
3/5: running [==================================================>]
4/5: running [==================================================>]
5/5: running [==================================================>]
verify: Service converged
[root@localhost ~]#
在集群的任何节点都能访问到nginx服务
网络
[root@localhost ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
bc63c15a8e51 bridge bridge local
ae26afa2d4ff docker_gwbridge bridge local
99797a78101b host host local
lmo5jloc8dl4 ingress overlay swarm
96a8b3f8f64a none null local
[root@localhost ~]#
ingress是个特殊的overlay网络,具有负载均衡的功能
移除服务
[root@localhost ~]# docker service rm my-nginx
my-nginx
[root@localhost ~]
5、其他命令
5.1、docker Stack
docker-compose 单机部署项目
docker Stack集群部署
# 单机部署
docker-compose up -d wordpress.yml
# 集群部署
docker stack deploy wordpress.yml
docker stack deploy -c docker-compose.yml stack-demo
docker-compose.yml
# 例子
version: "3"
services:
nginx:
image: nginx:alpine
ports:
- 80:80
deploy:
mode: replicated
replicas: 4
visualizer:
image: dockersamples/visualizer
ports:
- "9001:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
replicas: 1
placement:
constraints: [node.role == manager]
portainer:
image: portainer/portainer
ports:
- "9000:9000"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
replicas: 1
placement:
constraints: [node.role == manager]