目录
Docker三剑客之一:docker-machine
Docker Machine安装:
创建machine: machine指的是docker daemon主机,其实就是在host上安装和部署docker。
上传docker-machine-Linux-x86_64-0.16.2到docker1 中
docker2已经安装 docker
创建machine要求免密登陆远程主机: # ssh-keygen # ssh-copy-id 目标ip
真机httpd发布目录下建立以下文件 :
get-docker.sh ##更改repo地址
docker-ce.repo #安装包的来源
配置完成后即可执行安装命令:
--driver generic
指定驱动为普通驱动--engine-install-url
指定安装脚本地址,--generic-ip-address
需要安装docker的客户端ip以及主机名
ps ax查看进程
docker-machine ls #查看节点 可以看到连的是docker3的2376端口
-
cd /etc/yum.repos.d/
-
ls #会自己出现docker-ce.repo源
需要修改内核参数 ,不然会影响网络
开启一个2376端口用于远程连接
使之生效
可以看到警告消失
对docker2做免密认证
docker-machine create --driver generic --generic-ip-address=172.25.254.2 docker2 #由于docker2上已经安装docker,所以很快只需添加节点
查看2376端口
添加成功,查看节点:
根据提示执行:eval $(docker-machine env docker2),可以直接切入目标主机。
当前在docker2
切换到docker3上
env 可以看到host确定当前所在的主机
退出 重新连接到docker1
docker主机上生成的配置文件,从配置文件中可以看出,docker daemon启用了TLS验证功能,docker-machine已经为其生成好了所需的证书文件
安装一个bash脚本确定操作的是哪个主机
source出现报错
需要退出重新连接docker1 ,使bash生效
显示访问docker2所需的环境变量
也可以切换到docker3
-
docker-machine config docker2
-
#查看打印docker2的配置信息
Docker三剑客之一:docker-compose
Compose 项目是Docker官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在https://github.com/docker/compose 上
我们知道使用Dockerfile模板文件可以让用户很方便的定义一个单独的应用容器,其实在工作中,经常会碰到需要多个容器相互配合来完成的某项任务情况,例如工作中的web服务容器本身,往往会在后端加上数据库容器,甚至会有负责均衡器,比如LNMP服务
Compose 就是来做这个事情的,它允许用户通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)
建立docker-compose.yml文件
version: "3.7" # 指定 compose 文件的版本
services: # 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称
设置发布目录
docker-compose up 启动集群
vim /etc/hosts
按ctrl+c终止之后重新启动
测试负载均衡
down掉web1
重新测试
Docker三剑客之一:docker-swarm
Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/docker/swarm, 它是将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为其前端的访问入口,换言之,各种形式的Docker Client(compose,docker-py等)均可以直接与Swarm通信,甚至Docker本身都可以很容易的与Swarm集成,这大大方便了用户将原本基于单节点的系统移植到Swarm上,同时Swarm内置了对Docker网络插件的支持,用户也很容易的部署跨主机的容器集群服务。
Swarm是典型的master-slave结构,通过发现服务来选举manager。manager是中心管理节点,各个node上运行agent接受manager的统一管理,集群会自动通过Raft协议分布式选举出manager节点,无需额外的发现服务支持,避免了单点的瓶颈问题,同时也内置了DNS的负载均衡和对外部负载均衡机制的集成支持
创建swarm集群
docker swarm init #初始化后会出现一个token
docker3,4上:加入
docker node ls #查看节点部署
添加解析
因为之前的实验设置了内容信任,从本地拉取镜像需要验证,所以清理之前的镜像仓库
集群节点可以从本地仓库拉取镜像
创建集群服务
现在1是仓库,2、3、4是工作节点,其中2是leader
可以在docker3,4上看到服务
测试负载均衡
此时三个节点均可以访问到
docker3,4上也可以访问到
测试负载均衡
节点ip后加hostname.html可以查看容器id,以上结果说明是三个容器在负载均衡提供服务
缩减为3个
部署swarm监控
在docker1上传监控镜像到仓库:
访问8080端口查看监控
docker service create --name webservice -p 80:80 --replicas 3 myapp:v1 ##创建服务
在监控页面可以看到
容器伸缩
docker service scale webservice=6
可以 看到在每个节点上均衡分布
docker service scale webservice=20
同样也可以缩减为10个
docker service update --image myapp:v2 --update-parallelism 2 --update-delay 2s webservice##滚动更新
可以看到更新成功
更新完成后访问查看版本
docker service rollback webservice ##更新回滚
若其中一个节点down掉
docker3上不再做均衡
可以看到运行的10个容器
重启 docker3
又重新实现负载均衡
使用yml文件的形式创建集群
删除原来的集群服务
vim docker-compose.yml #编辑部署文件
可以看到三个节点都有一个副本
在yml文件中修改副本数为6
在yml文件中更改版本数为v2
docker3已经成功升级为master
docker swarm leave #worker节点脱离集群
可以看到已经down掉