Docker-三剑客之machine、compose、swam集群、visualizer监控、stack部署集群、Portainer可视化
目录:
- 介绍
- 一.docker-machine
- 1.machine安装
- 2.使用docker-machine
- 二.Docker-compose
- 1.docker-compose配置
- 2.修改haproxy配置文件
- 三.docker swarm
- 四.添加监控visualizer
- 1.创建监控:
- 2.实现业务滚动更新
- 五.docker stack部署集群
- 1.docker stack与docker-compose的区别
- 2.编写脚本yml文件
- 3.执行脚本
- 4.脚本实现更新
- 六.Portainer可视化
- 部署Portainer
介绍
DOCKER技术在推出后掀起了一阵容器化技术的热潮,容器化使得服务的部署变得极其简易,这为微服务和分布式计算提供了很大的便利。
为了把容器化技术的优点发挥到极致,docker公司先后推出了三大技术:docker-machine,docker-compose,docker-swarm,可以说是几乎实现了容器化技术中所有可能需要的底层技术手段。
doceker-machine是在解决docker运行环境的问题
docker-compose是在解决容器编排的问题
docker-swarm是解决多主机多个容器的部署调度的问题
一.docker-machine
Docker Machine是一个简化安装Docker环境的工具,主要作用是创建和管理docker主机。一般公司云服务器毕竟少,个人觉得Docker Machine在实际使用中用处不大。直接在云服务器上安装即可。
1.machine安装
我们需要docker-machine-Linux-x86_64-0.16.1安装包:
链接: docker-machine 提取码: 6itu
因为是二进制文件,所以需要增加执行权限
[root@server1 ~]# mv docker-machine-Linux-x86_64-0.16.1 /usr/local/bin/docker-machine
[root@server1 ~]# chmod +x /usr/local/bin/docker-machine
在真机上,我们需要下载get-docker脚本到http发布目录下
cd /var/www/html
wget https://get.docker.com/
mv index.html get-docker.sh
我们需要修改一下get-docker.sh文件
yum_repo="http://172.25.0.250/docker-ce.repo"
has_rootless_extras="0"
我们需要准备一台虚拟机server3
将server1,server3做免密i处理:
[root@server1 ~]# ssh-keygen
[root@server1 ~]# ssh-copy-id server3:
[root@server1 ~]# docker-machine create --driver generic --engine-install-url "http://172.25.0.250/get-docker.sh" --generic-ip-address=172.25.0.3 server3
这个时候我们到server3上查看存ps ax
可以看到在server3上以及开始执行动作了!
如下图正在执行安装docker-ce
在server1上查看docker-machine的进程
能够看到运行在server3上!
我们可以在隐藏目录docker下看到在server3下生成的文件:
cd .docker/
cd machine/machines/server3
ls
接着给server2也安装docker
先做免密,再执行脚本进行安装!
ssh-keygen
ssh-copy-id server2
docker-machine create --driver generic --engine-install-url "http://172.25.0.250/get-docker.sh" --generic-ip-address=172.25.0.2 server2
再一次列出所有docker-machine的操作进程
server2,3都在运行了!
docker-machine ls
2.使用docker-machine
完成之后,我们可以使用docker-machine来控制server2,3
我们可以停掉,重启,查看状态server2
docker-machine stop server2
docker-machine restart server2
docker-machine status server2
docker-machine config server2
docker-machine env server3
显示访问server3所需的环境变量,最后一行就是控制server3的方式
当控制server2,3之后docker images看到的是被控制的容器的镜像!
但是有个问题在于显示的不明显,不确定自己是在哪个容器里?
eval $(docker-machine env server3)
docker ps
docker images
eval $(docker-machine env server2)
docker images
env
我们来优化它!
将下面几个组件放置这个目录下
链接: .bash文件 提取码: gi5f
[root@server1 ~]# cd /etc/bash_completion.d
mget *.bash
修改环境变量使得,切换到其他的容器之后,可以有效果!
[root@server1 ~]# vim .bashrc
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
退出当前shell,重新登陆即可生效
我们可以看到如下图,很明显的效果,很清楚的直到当前在哪个容器中!
[root@server1 ~]# docker-machine env server3
[root@server1 ~]# eval $(docker-machine env server2)
二.Docker-compose
这个和下面要介绍的docker-swarm用处较大,compose是服务编排,即事先安排好服务的启动,依赖,创建服务的数量等等。
主要作用在于服务的安排和部署上。dcoker-compose技术,就是通过一个.yml配置文件,将所有的容器的部署方法、文件映射、容器连接等等一系列的配置写在一个配置文件里。便利了复杂的多服务的部署。
因为我们需要直接使用docker-compose指令来操作,所以需要在系统的/usr/local/bin目录下有compose的二进制文件!
因为用户在命令行输入命令后,系统会在环境变量$PATH内找命令。
cd /usr/local/bin
ls
docker-compose 在这即可!
1.docker-compose配置
家目录下创建项目目录,编写主配置文件,docker-compose在up的时候会自动读取
mkdir compose
cd compose
vim docker-compose.yml
内容如下:
version: "3.8"
services:web1:image: nginxnetworks:- webnetlumes:- ./web1:/usr/share/nginx/html #挂载数据卷为nginx默认发布文件web2:image: nginxnetworks:- webnetlumes:- ./web2:/usr/share/nginx/html #挂载数据卷为nginx默认发布文件haproxy:image: haproxynetworks:- webnetvolumes:- ./haproxy:/usr/local/etc/haproxy #数据卷为haproxy需要修改的主配置文件ports:- "80:80" #端口映射本机的80端口映射容器内的80端口networks: webnet: #网络连接方式为webnet
我们需要在当前路径下有web1,web2,haproxy目录
cd compose
mkdir web1
mkdir web2
echo web1 >web1/index.html
echo web2 > web2/index.html
2.修改haproxy配置文件
我们需要haproxy的配置文件在haproxy目录下
cd compose
mkdir haproxy
get haproxy.cfg
vim haproxy.cfg
内容修改如下图:
若是没有配置文件的直接复制下面这段:
globalmaxconn 65535stats socket /var/run/haproxy.stat mode 600 level adminlog 127.0.0.1 local0uid 200gid 200daemondefaultsmode httplog globaloption httplogoption dontlognullmonitor-uri /monitorurimaxconn 8000timeout client 30sretries 2option redispatchtimeout connect 5stimeout server 5sstats uri /admin/stats# The public 'www' address in the DMZ
frontend publicbind *:80 name clear #监听所有ip的80端口#bind 192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem#use_backend static if { hdr_beg(host) -i img }#use_backend static if { path_beg /img /css }default_backend dynamic# The static backend backend for 'Host: img', /img and /css.
backend dynamicbalance roundrobinserver a web1:80 check inter 1000server b web2:80 check inter 1000
启动服务,-d打入后台
docker-compose up -d
我们查看docker-compose状态还是结束状态
开启它!
再次查看状态是up!!
docker-compose ps
docker-compose start
docker-compose ps
测试:
在网页或者在虚拟机上都可以!
只要是先负载均衡即可!
当我们停止web1的服务后,发现负载均衡只剩web2了,但没有报错这说明有健康监测功能!
docker ps
docker stop compose_web1_1
docker ps
我们访问网页也可以看到web1掉先变红了!
172.25.0.1/admin/stats
此时我们只需要将compose服务重启一下,负载均衡即可恢复,很方便!
cd compose
docker-compose start
curl 172.25.0.1
我们当然在网页也可以看到web,web2都变绿了!恢复运作了!
三.docker swarm
swarm是基于docker平台实现的集群技术,他可以通过几条简单的指令快速的创建一个docker集群,接着在集群的共享网络上部署应用,最终实现分布式的服务。
相比起zookeeper等集群管理框架来说,swarm显得十分轻量,作为一个工具,它把节点的加入、管理、发现等复杂的操作都浓缩为几句简单的命令,并且具有自动发现节点和调度的算法,还支持自定制。虽然swarm技术现在还不是非常成熟,但其威力已经可见一般。
docker swarm的优缺点
开始初始化:
[root@server1 harbor]# docker swarm init
初始化之后,会生成加一个加入集群的指令!
我们将这个指令在其他节点执行就可以加入到集群中!
在server2,3都做:
然后在server1上可以看到加入集群的节点:
docker node ls
完成之后,我们需要准备一台虚拟机server4
将集群的leader迁移到server2上,而server1负责管理容器的仓库!
快速拉起server4的docker容器
将server3的配置文件传给server4上直接下载docker
将server2或者server1上的解决桥接的文件传给server3,4
cd /etc/sysctl.d
scp docker.conf server3:/etc/sysctl.d
scp docker.conf server4:/etc/sysctl.d
记得重启一下,不然不生效
sysctl --system
docker info
查看,警告没有了!
将server4的docker开启服务,并设置开机自启!
systemctl start docker
systemctl enable docker
将server2提升为集群的leader
docker node promote server2
docker node ls
# 可以看到server2变为了rechale
docker node demote server1
来到server2可以看到已经成为了leader,可以看到其他的集群节点!
docker node ls
将server1离开swarm集群
docker swarm leave
在server2上删除server1的集群节点
docker node rm server1
docker node ls
此时,我们将server4也加入集群节点中:
和刚才的leader变化了记得指定的leader为172.25.0.2!!!
在server2上查看到集群节点中server4已经加入进来了!
docker node ls
我们将server1上前面做的compose全部停掉,并将harbor仓库打开!
打开,停止compose服务的时候,一定要在指定的目录下,不然会出错!
cd
cd compose
docker-compose down
cd ../harbor
docker-compose up -d
紧接着web端访问harbor仓库,输入账户密码登陆,和之前的使用一致!
将server2的容器仓库指定文件发给server3,4
cd /etc/docker
scp daemon.json server3:/etc/docker/
scp daemon.json server4:/etc/docker/
重启docker服务
systemctl reload docker
再将证书发给server3,4
cd /etc/docker
scp -r certs.d/ server3:/etc/docker/
scp -r certs.d/ server4:/etc/docker/
将仓库的本地解析做好:
上传镜像myapp到容器仓库
server1:
docker load -i myapp.tardocker tag ikubernetes/myapp:v1 reg.westos.org/library/myapp:v1
docker tag ikubernetes/myapp:v2 reg.westos.org/library/myapp:v2docker push reg.westos.org/library/myapp:v1
docker push reg.westos.org/library/myapp:v2
在web端可以看到上传的镜像:
在server2 上:
创建集群服务,名为webservice 端口映射80:80 开启三个节点 镜像为myapp:v1
docker service create --name webservice --publish 80:80 --replicas 3 myapp:v1
在server4上可以看到镜像已经运行起来了:
docker ps
在server2上查看集群和集群节点服务
docker service ps webservice
测试访问:curl 172.25.0.2/hostname.html 可以看到访问的主机节点负载均衡
可以看到,因为刚才 开启三个节点,所以负载均衡每三次是一个循环!
将集群节点扩容:集群数量变为6个
docker service scale webservice=6
可以看到每个虚拟机运行两个节点
docker service ps webservice
测试:访问server2,3,4哪个IP都可以看到!
六台worker主机均负载均衡,采用算法为默认的rr轮询
四.添加监控visualizer
容器仓库主机server1:
将visualizer镜像压入harbor仓库
docker load -i visualizer.tar
docker tag dockersamples/visualizer:latest reg.westos.org/library/visualizer:latest docker push reg.westos.org/library/visualizer:latest
1.创建监控:
docker service create \
--name=viz \
--publish=8080:8080/tcp \
--constraint=node.role==managere \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
visualizer
网页访问监控visualizer,映射端口到主机的8080
firefox:172.25.0.2:8080
集群数量变为20个
docker service scale webservice=20
这个时候看监控,可以看到数量开始增多,变为20个
2.实现业务滚动更新
将myapp:v1 更新为myapp:v2
[root@server2 ~]# docker service update --image myapp:v2 --update-parallelism 2 --update-delay 5s webservice
我们可以看到监控显示:已经开始从v1>>v2
自己做实验可以观察一下动态变化的过程!
接着我们删掉刚才创建的容器和监控!
docker service rm webservice
docker service rm viz
查看监控已经清零
五.docker stack部署集群
基于 Docker Swarm 之上来完成应用的部署,面向大规模场景下的多服务部署和管理。
1.docker stack与docker-compose的区别
Docker stack不支持“build”指令,它是需要镜像是预先已经构建好的, 所以docker-compose更适合于开发场景;
Docker Compose是一个Python项目,使用Docker API规范来操作容器。
Docker Stack功能包含在Docker引擎中,是swarm mode的一部分。
Docker stack不支持基于第2版写的docker-compose.yml ,也就是version版本至少为3。然而Docker Compose对版本为2和3的 文件仍然可以处理;
docker stack把docker compose的所有工作都做完了,因此docker stack将占主导地位。
manager主机server2操作:
2.编写脚本yml文件
vim docker-compose.yml
version: "3.8"
services:web:image: myapp:v1ports:- "80:80" #端口映射,主机80映射容器80networks:- webnet #网络接口为webnetdeploy:replicas: 6 #拉起容器的数量update_config:parallelism: 2 # 每次更新的数量delay: 5s #更新时间间隔restart_policy:condition: on-failurevisualizer:image: visualizer:latestports:- "8080:8080" #监控端口为主机映射8080到容器的8080stop_grace_period: 1m30svolumes:- "/var/run/docker.sock:/var/run/docker.sock"deploy:placement:constraints:- "node.role==manager"networks:webnet:
3.执行脚本
docker stack deploy -c docker-compose.yml mycluster
查看stack进程:六个节点已经成功拉起!
docker stack ps mycluster
当改变脚本中节点数量
60个!重新执行脚本
可以看到监控直接拉起了60个进程!
replicas: 60 docker stack deploy -c docker-compose.yml mycluster
4.脚本实现更新
当我们再次修改脚本将镜像改为v2时候,就会实现滚动更新
执行脚本
docker stack deploy -c docker-compose.yml mycluster
查看监控,发现开始逐渐变化为v2
swarm集群在创建成功时会自动添加虚拟网卡
docker network ls
六.Portainer可视化
在前面的操作中,我们采用命令行的方式建立了swarm集群,但是这样的命令行并不是每一个运维或开发人员都熟记的,而且操作起来会比较麻烦。所以需要添加为swarm集群管理添加图形化管理界面。
链接: portainer 目录 提取码: zzct
部署Portainer
在server1上加载镜像并上传到仓库!
docker load -i portainer-agent.tar
docker load -i portainer.tar
在web端harbor仓库创建新的项目
一定要选 公开!
docker tag portainer/portainer:latest reg.westos.org/portainer/portainer:latest
docker tag portainer/agent:latest reg.westos.org/portainer/agent:latest
docker push reg.westos.org/portainer/portainer:latest docker push reg.westos.org/portainer/agent:latest
可以看到上传成功!
在server2上执行脚本
docker stack deploy -c portainer-agent-stack.yml portainer
docker service ls
网页访问图形管理界面,映射端口为9000
172.25.0.2:9000
设置两次密码,需要比较复杂的密码不然会报错!
进来后,可以看到我们创建的容器
在这图形化界面可以直接修改集群数量变为6个,然后点对勾
然后展开看到只剩6个其他的都挂了
接着我们把自己的仓库名添加进去
然后添加service,选择刚才创建的仓库名
记得输入端口映射
点击创建!
然后可以看见镜像创建成功,但是状态是pending,等待一会就会变为running
因为刚才设置端口映射为8000
所以访问8000端口:
172.25.0.2:8000
实验完毕!
关闭并离开集群:
manager主机server2:
docker swarm leave --force
worker主机:
docker swarm leave
Docker-三剑客之machine、compose、swam集群、visualizer监控、stack部署集群、Portainer可视化相关推荐
- Docker 三剑客-------docker swam,visualizer监控、stack部署集群、Portainer可视化
Docker 三剑客-------docker swam.visualizer监控.stack部署集群.Portainer可视化 文章目录 Docker 三剑客-------docker swam.v ...
- Docker 三剑客
链接: docker-machine 提取码: 6itu [root@server1 ~]# mv docker-machine-Linux-x86_64-0.16.1 /usr/local/bin/ ...
- Docker三剑客之Docker Swarm
目录 一.什么是Docker Swarm 二.Docker Swarm 基本结构图 三.Swarm的几个关键概念 四.Swarm的工作模式 五.Swarm的调度策略 六.Swarm Cluster模式 ...
- 大数据运维 | 集群_监控_CDH_Docker_K8S_两项目_云服务器
说明:大数据时代,传统运维向大数据运维升级换代很常见,也是个不错的机会.如果想系统学习大数据运维,个人比较推荐通信巨头运维大咖的分享课程,主要是实战强.含金量高.专注度高,有6个专题+2个大型项目+腾 ...
- docker三剑客之 Docker Machine Docker Compose Docker Swarm
Docker 三剑客 一.docker machine 1.Docker Machine 简介 2.Docker Machine实践 二.docker-compose 1.docker-compose ...
- @Docker三剑客(三大编排工具):Compose、Machine和Swarm
文章目录 Docker 一.Docker三大编排工具: 二.Docker Compose [compose的概述] [compose的核心概念] [安装Docker compose] 三.Docker ...
- 使用 Docker Stack 部署多服务集群
使用 Docker Stack 部署多服务集群 前言 单机模式下,我们可以使用 Docker Compose 来编排多个服务,而在 上一篇文章 中介绍的 Docker Swarm 只能实现对单个服务的 ...
- Docker三剑客之Compose
Docker三剑客之Compose Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用. Compose 基本介绍 Compose ...
- Docker三剑客——Machine
在上一篇文章中,我们介绍了docker三剑客中的Swarm,对使用docker集群方式管理容器有了一定的了解,如果忘记了该内容,可以先去复习一下Docker三剑客--Swarm. 今天我们开始介绍do ...
最新文章
- Linux下安装Tomcat启动报错
- Android 更新项目名称
- header+php+xiazai_php使用header函数实现文件下载
- [Android]反编译apk + eclipse中调试smali
- 虚拟机中安装MAC OS X教程(适用所有电脑方法,特别是cpu不支持硬件虚拟化的电脑)...
- hdu 1176 dp 数塔问题
- Spring Cloud Security:Oauth2结合JWT使用
- [洛谷P2124] 奶牛美容
- hibernate 数据源配置文件
- VMware虚拟机扩展Ubuntu系统磁盘空间
- IEnumerable和IEnumerator详解
- Android虚拟化技术
- html position的学习
- 常见URL字符及URL编码值
- React环境配置(第一个React项目)
- BXP无盘XP2000系统安装详解
- 如何新浪微博html5,新浪微博接入Html5游戏 注重轻量碎片化
- html 实现b站弹幕,可实现B站 蒙版弹幕 效果的前端组件 —— Barrage UI
- 要成为云架构师需要学什么技能?
- 面试现场:今日头条(一面已通过)