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

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

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

容器化部署=大麻烦
  • 怎么保证数据完整性
  • 怎么保护客户隐私数据
  • 怎么去调度容器
  • 怎么去监控追踪容器
  • 怎么去更新容器而不影响客户的业务
  • 如果容器down掉了。怎么自动恢复
  • 怎么去管很多微服容器
  • 怎么根据客户业务需求,快速方便的扩展容器
安装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由两部分组成:

  • Docker集群:将一个或多个Docker节点组织起来,用户就能以集群的方式进行管理;
  • 应用编排:有一套API用来部署和管理容器

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

总结
  • networks中也可以不指定driver:overlay,因为docker swarm默认网络类型是overlay。
  • 整个networks都可以不用配置。stack部署时会默认创建网络。如果我们定义网络。在docker stack deploy时会先默认创建一个网络,在创建一个我们定义的网络。
  • 一定要把镜像先拉取到本地再执行
Docker Stack和Docker Compose区别
  • Docker stack会忽略了“构建”指令,无法使用stack命令构建新镜像,它是需要镜像是预先已经构建 好的。 所以docker-compose更适合于开发场景;
  • Docker Compose是一个Python项目,在内部,它使用Docker API规范来操作容器。所以需要安 装Docker -compose,以便与Docker一起在您的计算机上使用; Docker Stack功能包含在Docker引擎中。你不需要安装额外的包来使用它,docker stacks 只是 swarm mode的一部分。
  • Docker stack不支持基于第2版写的docker-compose.yml ,也就是version版本至少为3。然而 Docker Compose对版本为2和3的 文件仍然可以处理;
  • docker stack把docker compose的所有工作都做完了,因此docker stack将占主导地位。同时, 对于大多数用户来说,切换到使用docker stack既不困难,也不需要太多的开销。如果您是Docker 新手,或正在选择用于新项目的技术,请使用docker stack。
,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页