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 ##说明安装成功

Docker三剑客docker-machine ,docker-compose,docker-swam_第1张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第2张图片

docker2已经安装 docker

Docker三剑客docker-machine ,docker-compose,docker-swam_第3张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第4张图片 创建machine要求免密登陆远程主机: # ssh-keygen # ssh-copy-id  目标ip

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第5张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第6张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第7张图片

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第8张图片真机httpd发布目录下建立以下文件 :

   get-docker.sh ##更改repo地址

Docker三剑客docker-machine ,docker-compose,docker-swam_第9张图片docker-ce.repo #安装包的来源 

Docker三剑客docker-machine ,docker-compose,docker-swam_第10张图片配置完成后即可执行安装命令: 

--driver generic 指定驱动为普通驱动
--engine-install-url指定安装脚本地址,
--generic-ip-address 需要安装docker的客户端ip以及主机名

Docker三剑客docker-machine ,docker-compose,docker-swam_第11张图片ps ax查看进程

Docker三剑客docker-machine ,docker-compose,docker-swam_第12张图片

docker-machine ls #查看节点 可以看到连的是docker3的2376端口

  • cd /etc/yum.repos.d/

  • ls  #会自己出现docker-ce.repo源

需要修改内核参数 ,不然会影响网络

Docker三剑客docker-machine ,docker-compose,docker-swam_第13张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第14张图片

 开启一个2376端口用于远程连接

Docker三剑客docker-machine ,docker-compose,docker-swam_第15张图片

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

使之生效

Docker三剑客docker-machine ,docker-compose,docker-swam_第16张图片可以看到警告消失

Docker三剑客docker-machine ,docker-compose,docker-swam_第17张图片对docker2做免密认证

Docker三剑客docker-machine ,docker-compose,docker-swam_第18张图片

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第19张图片  查看2376端口

Docker三剑客docker-machine ,docker-compose,docker-swam_第20张图片

添加成功,查看节点: 

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第21张图片

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第22张图片

当前在docker2 

 切换到docker3上

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第23张图片退出 重新连接到docker1

  • rpm -qa | grep bash  

  • #需要安装bash扩展

Docker三剑客docker-machine ,docker-compose,docker-swam_第24张图片docker主机上生成的配置文件,从配置文件中可以看出,docker daemon启用了TLS验证功能,docker-machine已经为其生成好了所需的证书文件

Docker三剑客docker-machine ,docker-compose,docker-swam_第25张图片

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第26张图片

  • vim .bashrc 

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第27张图片source出现报错

需要退出重新连接docker1 ,使bash生效

Docker三剑客docker-machine ,docker-compose,docker-swam_第28张图片 显示访问docker2所需的环境变量

Docker三剑客docker-machine ,docker-compose,docker-swam_第29张图片也可以切换到docker3

  • docker-machine config docker2  

  • #查看打印docker2的配置信息 

Docker三剑客docker-machine ,docker-compose,docker-swam_第30张图片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三剑客docker-machine ,docker-compose,docker-swam_第31张图片

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第32张图片

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第33张图片Docker三剑客docker-machine ,docker-compose,docker-swam_第34张图片

建立docker-compose.yml文件 

version: "3.7"				# 指定 compose 文件的版本
services:					 # 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称

Docker三剑客docker-machine ,docker-compose,docker-swam_第35张图片设置发布目录

Docker三剑客docker-machine ,docker-compose,docker-swam_第36张图片  docker-compose up 启动集群

Docker三剑客docker-machine ,docker-compose,docker-swam_第37张图片vim /etc/hosts

Docker三剑客docker-machine ,docker-compose,docker-swam_第38张图片按ctrl+c终止之后重新启动

Docker三剑客docker-machine ,docker-compose,docker-swam_第39张图片 测试负载均衡

Docker三剑客docker-machine ,docker-compose,docker-swam_第40张图片down掉web1

重新测试

Docker三剑客docker-machine ,docker-compose,docker-swam_第41张图片

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三剑客docker-machine ,docker-compose,docker-swam_第42张图片

  • docker-compose down

  • docker ps -a

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第43张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第44张图片

创建swarm集群 

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第45张图片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/

Docker三剑客docker-machine ,docker-compose,docker-swam_第46张图片

在docker3,4上

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第47张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第48张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第49张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第50张图片添加解析

Docker三剑客docker-machine ,docker-compose,docker-swam_第51张图片因为之前的实验设置了内容信任,从本地拉取镜像需要验证,所以清理之前的镜像仓库

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第52张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第53张图片

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三剑客docker-machine ,docker-compose,docker-swam_第54张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第55张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第56张图片

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第57张图片集群节点可以从本地仓库拉取镜像

Docker三剑客docker-machine ,docker-compose,docker-swam_第58张图片

创建集群服务

现在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

Docker三剑客docker-machine ,docker-compose,docker-swam_第59张图片可以在docker3,4上看到服务

Docker三剑客docker-machine ,docker-compose,docker-swam_第60张图片

测试负载均衡

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第61张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第62张图片

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三剑客docker-machine ,docker-compose,docker-swam_第63张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第64张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第65张图片

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第66张图片docker3,4上也可以访问到

Docker三剑客docker-machine ,docker-compose,docker-swam_第67张图片 测试负载均衡

Docker三剑客docker-machine ,docker-compose,docker-swam_第68张图片

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第69张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第70张图片 Docker三剑客docker-machine ,docker-compose,docker-swam_第71张图片

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第72张图片 缩减为3个

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第73张图片

部署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三剑客docker-machine ,docker-compose,docker-swam_第74张图片

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第75张图片 访问8080端口查看监控

Docker三剑客docker-machine ,docker-compose,docker-swam_第76张图片 docker service create --name webservice -p 80:80 --replicas 3 myapp:v1 ##创建服务

在监控页面可以看到

Docker三剑客docker-machine ,docker-compose,docker-swam_第77张图片容器伸缩

docker service scale webservice=6

Docker三剑客docker-machine ,docker-compose,docker-swam_第78张图片可以 看到在每个节点上均衡分布

Docker三剑客docker-machine ,docker-compose,docker-swam_第79张图片 

docker service scale webservice=20

Docker三剑客docker-machine ,docker-compose,docker-swam_第80张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第81张图片 

同样也可以缩减为10个

Docker三剑客docker-machine ,docker-compose,docker-swam_第82张图片docker service update --image myapp:v2 --update-parallelism 2 --update-delay 2s webservice##滚动更新

--image 指定要更新的镜像

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

--update-delay     指定更新间隔 

Docker三剑客docker-machine ,docker-compose,docker-swam_第83张图片可以看到更新成功

Docker三剑客docker-machine ,docker-compose,docker-swam_第84张图片更新完成后访问查看版本 

docker service rollback webservice ##更新回滚

Docker三剑客docker-machine ,docker-compose,docker-swam_第85张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第86张图片若其中一个节点down掉

Docker三剑客docker-machine ,docker-compose,docker-swam_第87张图片docker3上不再做均衡

Docker三剑客docker-machine ,docker-compose,docker-swam_第88张图片可以看到运行的10个容器

Docker三剑客docker-machine ,docker-compose,docker-swam_第89张图片重启 docker3

Docker三剑客docker-machine ,docker-compose,docker-swam_第90张图片又重新实现负载均衡  

Docker三剑客docker-machine ,docker-compose,docker-swam_第91张图片

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

删除原来的集群服务

docker service rm webservice
docker service rm viz
docker service ls

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第92张图片 

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

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第93张图片 可以看到三个节点都有一个副本

Docker三剑客docker-machine ,docker-compose,docker-swam_第94张图片

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

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第95张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第96张图片

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第97张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第98张图片

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 ##已经没有查看的权限了

Docker三剑客docker-machine ,docker-compose,docker-swam_第99张图片

Docker三剑客docker-machine ,docker-compose,docker-swam_第100张图片

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

Docker三剑客docker-machine ,docker-compose,docker-swam_第101张图片 

 

你可能感兴趣的:(docker,容器,运维)