Docker三剑客docker-machine ,docker-compose,docker-swam

目录

Docker三剑客之一:docker-machine 

​Docker三剑客之一:docker-compose

Docker三剑客之一:docker-swarm

创建swarm集群 

创建集群服务

部署swarm监控

使用yml文件的形式创建集群


Docker三剑客之一:docker-machine 

Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。Docker Machine 项目基于 Go 语言实现的,支持在常规Linux操作系统、虚拟化平台、openstack、公有云等不同环境下安装配置docker host。

Docker Machine安装:

创建machine: machine指的是docker daemon主机,其实就是在host上安装和部署docker。

上传docker-machine-Linux-x86_64-0.16.2到docker1 中

mv docker-machine-Linux-x86_64-0.16.2 /usr/local/bin/
cd /usr/local/bin/
mv docker-machine-Linux-x86_64-0.16.2 docker-machine
chmod +x docker-machine
docker-machine ##说明安装成功

docker2已经安装 docker

 创建machine要求免密登陆远程主机: # ssh-keygen # ssh-copy-id  目标ip

ssh-keygen
vim /etc/hosts
ssh-copy-id docker3
ssh docker3##测试可以通过免密连接

docker-machine create --driver generic --generic-ip-address=172.25.254.3 docker3 ##创建主机 docker3但是失败了,找不到路径

真机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端口用于远程连接

cd /etc/sysctl.d/
ls
scp docker.conf docker3:/etc/sysctl.d/ 

使之生效

可以看到警告消失

对docker2做免密认证

docker-machine create --driver generic --generic-ip-address=172.25.254.2 docker2 #由于docker2上已经安装docker,所以很快只需添加节点

  查看2376端口

添加成功,查看节点: 

docker-machine env docker2 显示访问docker2所需的环境变量 

 根据提示执行:eval $(docker-machine env docker2),可以直接切入目标主机。

当前在docker2 

 切换到docker3上

env 可以看到host确定当前所在的主机

退出 重新连接到docker1

  • rpm -qa | grep bash  

  • #需要安装bash扩展

docker主机上生成的配置文件,从配置文件中可以看出,docker daemon启用了TLS验证功能,docker-machine已经为其生成好了所需的证书文件

安装一个bash脚本确定操作的是哪个主机 

  • vim .bashrc 

  •   添加:PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '

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)

Compose 中有两个重要的概念:

    服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例

    项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml中定义

mkdir compose
cd compose/
ls
docker-compose

docker run --rm -it nginx bash ##查看nginx中的配置文件

cd -
ls
mkdir proxy
cd proxy/
ls
 \vi nginx.conf
vim nginx.conf ##修改配置文件

建立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网络插件的支持,用户也很容易的部署跨主机的容器集群服务。

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。

从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。

Swarm deamon只是一个调度器(Scheduler)+路由器(router),Swarm自己不运行容器,它只是接受Docker客户端发来的请求,调度适合的节点来运行容器,这就意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,放Swarm重新恢复运行之后,会收集重建集群信息。

Swarm是典型的master-slave结构,通过发现服务来选举manager。manager是中心管理节点,各个node上运行agent接受manager的统一管理,集群会自动通过Raft协议分布式选举出manager节点,无需额外的发现服务支持,避免了单点的瓶颈问题,同时也内置了DNS的负载均衡和对外部负载均衡机制的集成支持

  • docker-compose down

  • docker ps -a

cd harbor/
 ls
./install.sh --help
 ./install.sh --with-chartmuseum #启用helmchart插件
 docker-compose ps

创建swarm集群 

docker swarm init   #初始化后会出现一个token

docker3,4上:加入

docker swarm join --token SWMTKN-1-4v7u4pqspl5squgymmpu9zzkvw5d01vp0gu35arjkau3m3fkpy-e1ft59wjflb3l7n0f6997ffum 172.25.254.2:2377

docker node ls #查看节点部署

cat daemon.json ##默认镜像仓库
scp -r daemon.json certs.d/ docker3:/etc/docker/
vim /etc/hosts
scp -r daemon.json certs.d/ docker3:/etc/docker/
scp -r daemon.json certs.d/ docker4:/etc/docker/

在docker3,4上

cd /etc/docker
 ls
 systemctl daemon-reload #加载
 systemctl reload docker
docker info

添加解析

因为之前的实验设置了内容信任,从本地拉取镜像需要验证,所以清理之前的镜像仓库

docker-compose down  ##停止容器
ls
./prepare #清理
df -h /
 ls
 rm -fr docker-compose.yml
 docker volume ls
docker volume prune #删除卷

cd /data #仓库信息都在/data里面
 ls
cp -r certs/ ~
ls
 rm -fr * ##删除/data的内容
cp -r ~/certs/ .
 ls
 pwd
 cd
cd harbor/
ls
 ./install.sh --help
./install.sh --with-chartmuseum #重新启动

docker push reg.westos.org/library/busybox:latest
docker push reg.westos.org/library/nginx:latest

集群节点可以从本地仓库拉取镜像

创建集群服务

现在1是仓库,2、3、4是工作节点,其中2是leader 

docker service ls #查看集群服务
docker service create --name webservice -p 80:80 --replicas 3 nginx ##创建集群内服务webservice
docker service ls

docker ps

可以在docker3,4上看到服务

测试负载均衡

此时三个节点均可以访问到

docker search myapp
docker search ikubernetes/myapp:v1
docker search ikubernetes
docker pull ikubernetes/myapp:v1
docker pull ikubernetes/myapp:v2
 docker tag ikubernetes/myapp:v1
docker tag ikubernetes/myapp:v1 reg.westos.org/library/myapp:v1
docker tag ikubernetes/myapp:v2 reg.westos.org/library/myapp:v2
docker push reg.westos.org/library/myapp:v1
docker push reg.westos.org/library/myapp:v2 #上传镜像到本地仓库

docker service rm webservice #删除集群服务
docker service ls
docker service create --name webservice -p 80:80 --replicas 3 myapp:v1

docker3,4上也可以访问到

 测试负载均衡

docker service scale webservice=6 .##拉伸服务容器个数拉伸为6个
docker service ls
docker service ps webservice #可以看到有6个容器

 

节点ip后加hostname.html可以查看容器id,以上结果说明是三个容器在负载均衡提供服务 

 缩减为3个

docker service scale webservice=3
docker service ps webservice
docker service rm webservice ##删除服务
docker service ls

部署swarm监控

在docker1上传监控镜像到仓库:

docker pull dockersamples/visualizer
docker tag dockersamples/visualizer:latest reg.westos.org/library/visualizer:latest
docker push reg.westos.org/library/visualizer:latest

docker service ls
docker node ls ##查看集群节点
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   visualizer ##启动监控
docker service ls

 访问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##滚动更新

--image 指定要更新的镜像

--update-parallelism 指定最大同步更新的任务数

--update-delay     指定更新间隔 

可以看到更新成功

更新完成后访问查看版本 

docker service rollback webservice ##更新回滚

若其中一个节点down掉

docker3上不再做均衡

可以看到运行的10个容器

重启 docker3

又重新实现负载均衡  

使用yml文件的形式创建集群

删除原来的集群服务

docker service rm webservice
docker service rm viz
docker service ls

vim docker-compose.yml #编辑部署文件

 

docker stack deploy -c docker-compose.yml  mycluster #stack在部署的时候自动为服务创建了网络;-c指定文件;mycluster是指定的名称

docker service ls #可以看到有三个副本
docker service ps mycluster_webservice ##查看服务

 可以看到三个节点都有一个副本

vim docker-compose.yml
docker stack deploy -c docker-compose.yml  mycluster 更新

在yml文件中修改副本数为6

在yml文件中更改版本数为v2

docker stack rm mycluster #删除监控
docker service ls
docker node ls #查看集群节点
docker node promote docker3 ##将docker3提升为master
docker node ls #暂时还没就绪
docker node demote docker2 ##将docker2降级
docker node ls ##已经没有查看的权限了

docker3已经成功升级为master

docker swarm leave #worker节点脱离集群

可以看到已经down掉

docker node ls
docker node rm docker2 ##删除集群节点
docker node rm docker4
docker node ls
docker swarm leave
docker swarm leave --force #master也脱离集群
docker node ls

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值