目录:

  • 介绍
  • 一.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可视化相关推荐

  1. Docker 三剑客-------docker swam,visualizer监控、stack部署集群、Portainer可视化

    Docker 三剑客-------docker swam.visualizer监控.stack部署集群.Portainer可视化 文章目录 Docker 三剑客-------docker swam.v ...

  2. Docker 三剑客

    链接: docker-machine 提取码: 6itu [root@server1 ~]# mv docker-machine-Linux-x86_64-0.16.1 /usr/local/bin/ ...

  3. Docker三剑客之Docker Swarm

    目录 一.什么是Docker Swarm 二.Docker Swarm 基本结构图 三.Swarm的几个关键概念 四.Swarm的工作模式 五.Swarm的调度策略 六.Swarm Cluster模式 ...

  4. 大数据运维 | 集群_监控_CDH_Docker_K8S_两项目_云服务器

    说明:大数据时代,传统运维向大数据运维升级换代很常见,也是个不错的机会.如果想系统学习大数据运维,个人比较推荐通信巨头运维大咖的分享课程,主要是实战强.含金量高.专注度高,有6个专题+2个大型项目+腾 ...

  5. docker三剑客之 Docker Machine Docker Compose Docker Swarm

    Docker 三剑客 一.docker machine 1.Docker Machine 简介 2.Docker Machine实践 二.docker-compose 1.docker-compose ...

  6. @Docker三剑客(三大编排工具):Compose、Machine和Swarm

    文章目录 Docker 一.Docker三大编排工具: 二.Docker Compose [compose的概述] [compose的核心概念] [安装Docker compose] 三.Docker ...

  7. 使用 Docker Stack 部署多服务集群

    使用 Docker Stack 部署多服务集群 前言 单机模式下,我们可以使用 Docker Compose 来编排多个服务,而在 上一篇文章 中介绍的 Docker Swarm 只能实现对单个服务的 ...

  8. Docker三剑客之Compose

    Docker三剑客之Compose Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用. Compose 基本介绍 Compose ...

  9. Docker三剑客——Machine

    在上一篇文章中,我们介绍了docker三剑客中的Swarm,对使用docker集群方式管理容器有了一定的了解,如果忘记了该内容,可以先去复习一下Docker三剑客--Swarm. 今天我们开始介绍do ...

最新文章

  1. Linux下安装Tomcat启动报错
  2. Android 更新项目名称
  3. header+php+xiazai_php使用header函数实现文件下载
  4. [Android]反编译apk + eclipse中调试smali
  5. 虚拟机中安装MAC OS X教程(适用所有电脑方法,特别是cpu不支持硬件虚拟化的电脑)...
  6. hdu 1176 dp 数塔问题
  7. Spring Cloud Security:Oauth2结合JWT使用
  8. [洛谷P2124] 奶牛美容
  9. hibernate 数据源配置文件
  10. VMware虚拟机扩展Ubuntu系统磁盘空间
  11. IEnumerable和IEnumerator详解
  12. Android虚拟化技术
  13. html position的学习
  14. 常见URL字符及URL编码值
  15. React环境配置(第一个React项目)
  16. BXP无盘XP2000系统安装详解
  17. 如何新浪微博html5,新浪微博接入Html5游戏 注重轻量碎片化
  18. html 实现b站弹幕,可实现B站 蒙版弹幕 效果的前端组件 —— Barrage UI
  19. 要成为云架构师需要学什么技能?
  20. 面试现场:今日头条(一面已通过)

热门文章

  1. 国外大神数据,全球主板厂商信息汇总,A B X系在主板汇总
  2. php 射影定理,射影定理是哪年级学的
  3. Spark Streaming + ES构建美团App异常监控平台
  4. if 语句与switch语句
  5. 如何获取所有股票代码
  6. 5 坐标变换与视觉测量
  7. “项目经理,程序员的中年危机
  8. 爬虫入门经典(十) | 一文带你快速爬取网易云音乐
  9. react为什么要废弃三个生命周期?
  10. 自动化立体库管理系统软硬件实训