小伙伴儿们,如果觉得文章干货满满,欢迎加入公众号【编程识堂】,更多干货等着你们来哦!

温馨提醒:本文主要讲解docker-swarm实现docker集群,若小伙伴们对docker还不是很熟悉,请查阅上篇文章:Docker容器虚拟化技术

容器化部署=大麻烦安装docker-swarm官方文档

https://docs.docker.com/engine/swarm/

概述

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,可以将组成某个应该的多个docker容器 编排在一起,同时管理。而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,其主要作 用是把若干台Docker主机抽象为一个整体,并且通过一个入口(docker stack)统一管理这些Docker主 机上的各种Docker资源。

stack 是构成特定环境中的 service 集合, 它是自动部署多个相互关联的服务的简便方法,而无需单独定 义每个服务。

stack file 是一种 yaml 格式的文件,类似于 docker-compose.yml 文件,它定义了一个或多个服务,并 定义了服务的环境变量、部署标签、容器数量以及相关的环境特定配置等。

Docker Swarm由两部分组成:

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(1)

配置私有仓库

私有仓库不是集群必备的组件。集群的每个节点都需要安装镜像,如果不搭建私有仓库,下载镜像速度 比较耗时。

vi /etc/docker/daemon.json "insecure-registries":["192.168.198.101:5000"] systemctl daemon-reload systemctl restart docker

初始化管理节点

master 192.168.150.141 node1 192.168.150.142 node2 192.168.150.136

关于advertise-addr和listen-addr这两个参数: 前者用来指定其他节点连接m0时的地址 后者指定承载swarm流量的IP和端口 会在本地新建docker网络

docker swarm init --advertise-addr 192.168.150.141:2377 --listen-addr 192.168.150.141:2377

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(2)

查询节点

docker node ls

获取加入manager 、woker节点token

有效期24小时

docker swarm join-token manager docker swarm join-token worker

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(3)

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(4)

节点权限升级降级

将worker节点提升为manager节点,在manager节点执行如下命令: docker node promote node1 docker node ls 将manager节点降低为worker节点,在manager节点执行如下命令: docker node demote node2 docker node ls

脱离集群

在ndoe2节点使用命令: docker swarm leave 稍微等待几分钟,在manager节点使用命令: docker node ls 发现node2节点已经脱离集群管理。

删除脱离集群的节点

先使用命令:docker node demote 节点名称。 将某一个节点降为worker节点后,再删除。(或在woker节点执行) 使用命令:docker node rm 节点名称|节点ID 例如:docker node rm work-02 manager节点只能强制退出。 命令:docker swarm leave --force。manager退出后意味着整个swarm 不复存在。

图形界面docker官网

https://hub.docker.com/r/dockersamples/visualizer

基础镜像

拉取镜像 docker pull dockersamples/visualizer:latest 备份镜像 docker save dockersamples/visualizer:latest -o dockersamples.visualizer.tar 还原镜像 docker load -i dockersamples.visualizer.tar

运行镜像

必须在manager节点运行 docker run -itd --name visualizer -p 8099:8080 -e HOST=192.168.150.141 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer:latest docker service create \ --name=viz \ --publish=8080:8080/tcp \ --constraint=node.role==manager \ --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \ dockersamples/visualizer

测试镜像

http://192.168.150.141:8099/

基础命令swarm命令

docker swarm init 初始化一个 swarm 群集 docker swarm join 加入群集作为节点或管理器 docker swarm join-token 管理用于加入群集的令牌 docker swarm leave 离开 swarm 群集 docker swarm unlock 解锁 swarm 群集 docker swarm unlock-key 管理解锁钥匙 docker swarm update 更新 swarm 群集

node命令

docker node demote 从 swarm 群集管理器中降级一个或多个节点 docker node inspect 显示一个或多个节点的详细信息 docker node ls 列出 swarm 群集中的节点 docker node promote 将一个或多个节点推入到群集管理器中 docker node ps 列出在一个或多个节点上运行的任务,默认为当前节点 docker node rm 从 swarm 群集删除一个或多个节点 docker node update 更新一个节点

service命令

docker service create 创建服务 docker service inspect 显示一个或多个服务的详细信息 docker service logs 获取服务的日志 docker service ls 列出服务 docker service rm 删除一个或多个服务 docker service scale 设置服务的实例数量 docker service update 更新服务 docker service rollback 恢复服务至update之前的配置

stack命令

docker stack deploy 部署新的堆栈或更新现有堆栈 docker stack ls 列出现有堆栈 docker stack ps 列出堆栈中的任务 d ocker stack rm 删除一个或多个堆栈 docker stack services 列出堆栈中的服务

部署nginx集群部署

在manager节点中创建overlay网络: docker network create -d overlay nginx-net 创建5个nginx:alpines容器的集群: docker service create --name nginx --network nginx-net -p 80:80 --replicas 5 nginx:1.18.0-alpine 在manager节点使用docker service ls 命令查看服务情况,worker节点无法查看: docker service ls 在manager或者worker节点都可以执行docker ps命令查看本虚拟机容器情况: docker ps manager节点只用于管理集群,不希望部署服务(驱离)。 docker node update --availability drain master 使用docker service scale nginx=2命令将服务缩减为2个容器: docker service scale nginx=2

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(5)

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(6)

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(7)

升级nginx版本

旧版本

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(8)

进入其中一个容器查看nginx的版本信息: 注意事项:因nginx是alpine的linux版本。不能使用/bin/bash指令。

docker exec -it 503fe639bb89 sh nginx -v

1.更新镜像: docker service update --image nginx:1.19.3-alpine nginx

2.添加或者更新一个对外端口: docker service update --publish-add 8090:80 nginx

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(9)

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(10)

overlay网络调度

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(11)

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(12)

192.168.150.141主机并没有部署nginx,但能访问,主要是overlay网络服务调度

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(13)

删除服务

docker service rm nginx docker network rm nginx-net

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(14)

stack

docker-compose.yml

dockerswarm集群怎么搭建(Docker-Swarm容器集群部署)(15)

运行nginx

在manager节点中创建docker-compose.yml文件。执行如下命令: docker stack deploy nginx-stack --compose-file=docker-compose.yml 或者是 docker stack deploy nginx-stack -c docker-compose.yml 查看stack服务运行情况。执行如下命令: docker stack services nginx-stack 查看5个容器运行在哪个节点中。执行如下命令: docker service ls 查看到NAME中的服务名为:nginx-stack_nginx-web docker service ps nginx-stack_nginx-web 进行测试: curl 192.168.0.105 curl 192.168.0.106 curl 192.168.0.107 删除stack服务。执行如下命令: docker stack rm nginx-stack

总结Docker Stack和Docker Compose区别,