docker容器监控

news2025/1/10 19:50:29

docker容器监控

一、docker介绍

Docker的中文意思就是码头工人,进入到Docker的官方网站后,也可以看到Docker的图标,如下图所示。

 

这个Docker图标上就是一条鲸鱼,上面有很多集装箱,集装箱就相当于虚拟环境,每个集装箱有自己的虚拟环境,Docker中文意思是码头工人,相当于把集装箱从鲸鱼身上取下来,然后使用这个集装箱的虚拟环境。

Docker搭建虚拟环境包括三个要素,Registry,Contaniner和Image。如下图所示。

 

从图中可以看出,Registry是一个远程的仓库,从远程的仓库可取拉取一个镜像到本地,拉取镜像后可以运行成一个容器。客户端可以使用docker pull从远程仓库拉取一个镜像,docker run指令可以将一个镜像运行成一个容器,进入这个容器需要使用docker exec指令,可以进入到运行中的容器中,docker build可以把一个设置成功的虚拟环境容器再打包成环境。这系列操作可以通过以下简单实现。

 

这里的元程仓库是hub.docker.com,这里包括很多的docker镜像。

二、windows中docker的安装

进入docker官网下载地址docker下载,下载Windows版本。

 

下载之后双击打开,按默认设置点击安装,完成后界面如下,点击close and restart重启完成安装。

 

进入docker主界面,左下角显示绿色,则表示docker安装成功。

 

在docker设置中添加镜像网址"registry-mirrors":["https://docker.mirrors.ustc.edu.cn/"]。添加完成后点击右下角蓝色按钮应用设置。

 

在power shell中输入具体的docker指令。

三、docker实现容器式监控

docker程序还是安装在硬盘上的,随着程序的增加,程序运行时间就会长,需要的内存就会大,硬盘的数据也会多。 这就带来性能上的优化问题。解决内存、硬盘、网络接口速度不能超过限额也就成为一个问题。

也就是,如果多个容器运行,需要收集docker各容器的运行状态和运行信息,也就是需要监控模块的参与。

docker运行的监控原理图如下所示。

 

 

图中指示可以使用docker stats去查看每个容器的运行状态。

#docker  stats

使用这个指令后的运行结果如下所示。

 

对这个结果也可以进行格式化提取,使用—format参数对输出的格式进行初始化。

如单纯提取出ContainerId,指令如下。

docker stats –format “{{.Container}}”

这个指令把docker stats中的第一列的维度Container做为format的参数,然后输出了容器运行的相关信息。

如果输出再添加上CPU的占比信息,这里把Container和CPU的信息以“:”号隔开。

docker stats –format “{{.Container}}:{{.CPUPerc}}”

注意:这里提取CPU的百分比信息,需要把CPU%列维度的名称中“%”替换为Perc,即可。

如果再把内存的占比信息

Docker stats –format “{{.Container}}:{{.CPUPerc}}:{{MemPerc}}”

接下来进入监控的实现,监控实现的时候,不会直接在宿主机中监控,这样不利于管理,因为监控需要提取相关的重要信息,收集信息后还需要使用一些有利的语言工具进行分析,进而进行图形展示。如使用python,matplotlib,tensorflow,web这样的技术架构形成分析界面,这样就需要服务器也要安装这样的资源才能进行分析,cpu的资源又被无端被占用。可以使用docker容器配置环境,进行环境监控。

监控方法的原理图如下所示。

 

从图中可以得出。需要把Docker stats信息传入到docker容器中,然后在容器安装python,去完成监控信息的分析即可。

解决方法:把docker stats的输出结果放在文件里,文件挂载容器数据卷持久到容器中,运行python程序对数据进行提取。

这里提到了一个技术“挂载”,Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定。可以这样理解,挂载相当于docker的虚拟环境可能使用主机中文件信息。

具体把docker stats的监控信息挂载到docker虚拟机中进行分析的流程如下。

第一步:实时流的获取
docker stats --format "ContainerID:{{.Container}}:CPU%:{{.CPUPerc}}:MEM%:{{.MemPerc}}">info.txt

第二步:运行后ctrl+c中止

第三步:使用ftp软件下载info.txt文件到本地

第四步,写一段程序分解info.txt

import pandas
data=pandas.read_csv("info.txt",sep=":",names=["name1","container_id","name2","cpu%","name3","Mem%"])
data=data[["container_id","cpu%","Mem%"]]
#有几个容器就有几条指令,通过unique()方法对容器进行汇总去重统计
container_length=data["container_id"].unique().size
while True:
print(data.tail(container_length))

第五步,接下来,就需要在宿主机建一个文件夹,管理这两个文件,一个是把文件能够在docker虚拟机中执行,一个是收集到的容器信息info.txt。    

第六步:现在使用-v实现挂载目录,把宿主机目录挂载到虚拟环境中,需要使用docker pull python3拉取一个python3的容器。然后使用下面的指令进行挂载。
Docker run –it  -v  /home/monitor python /bin/bash
这样可以进入到启动容器中,进入容器后,在这里使用pip3安装pandas软件,使用指令如下。
    pip install pandas
如图;

第七步:保留进程退出宿主机
    Ctrl+p+q

第八步:先删除宿主机文件info.txt,然后运行docker stats一边收集docker容器的相关信息,一边在宿主机中启动 python程序进行实时流的分析,先重新收集docker容器的相关信息。命令如下。
docker stats
dokcer stats --format "ContainerID:{{.Container}}:CPU%:{{.CPUPerc}}:MEM%:{{.MemPerc}}">/home/monitor/info.tx

第九步:再次进入容器,启动python test.py

 

这里可以看到收集到的实时信息,分析和后续的web展示先略。

四、google方案的图形展示

前面介绍了启动docker stats来收集容器信息,这里也可以不必启动docker stats,可以根据需求监控docker的具体工作目录。Google提供的cadvisor可以监控/var/lib/docker ,第二/sys,第三/var/run,其中var/lib/docker是docker中的相关信息,/sys是系统的相关信息,/var/run是系统运行的相关信息,这些收集的技术的原理图如下图所示。

 

这里提醒了大家,google使用这个技术默认采用8080端口,这个端口是启动容器中不能占用的端口。监控容器的应用使用cadvisor。

拉取镜像的命令如下。

docker pull google/cadvisor

这里为了更好的验证google/cadvisor,在启动google/cadvisor之前首先需要启动三个centos容器。便于监控使用。启动google/cadvisor容器指令如下。

docker run -it -p 8890:8080 -v /var/run:/var/run -v /var/lib/docker:/var/lib/docker:ro -v /sys:/sys:ro google/cadvisor /bin/bash

启动后,在地址栏输入虚拟机的ip+端口号

如http://192.168.110.148:8890/containers/

 

进入首页,可以查看整体运行情况。进入首页后,点击第一项:Docker Containers,就可以查看到所有的容器名称,可以点击进入到其中一个容器。

这里可查看容器的运行情况,如下图所示。

 

这里CPU shares 1024shares表示了CPU进行了限额设置。

比如A容器设置1024,B容器1024C容器1024,A/B/C就可以得到1:1:1,意味着系统平分CPU的占比。

如果A容器设置512,假定启动了centos;B容器设置1024 ,假定启动了apache小程序,C容器设置2048,假设启动 python机器学习。那么A:B:C=1:2:4表示在CPU空闲时间内,C优先级比A/B都高,C占cpu的比率就会大。

具体cpu限额的设置方法,可以在启动容器时设定这个值。指令参数如下。

Docker run --cpu-shares 1024

还可以从前台查看docker服务环境的运行情况,专业术语叫巡检。巡检界面如下图所示。

 

这里图形显示,显示的内容是实时的,这条曲线也会一直在运动着。

通过google/cadvisor监控查看运转情况的原理图如下 。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

股票信息网站

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字):

基于java+springmvc+mybatis+vue+mysql的志愿者招募网站

项目介绍 网络的广泛应用给生活带来了十分的便利。所以把志愿者招募管理与现在网络相结合,利用java技术建设志愿者招募网站,后端使用ssm框架,前端使用vue技术,实现志愿者招募的信息化。对于进一步提高志愿者招募管理发展&#xf…

【Java寒假打卡】Java基础-面向对象

【Java寒假打卡】Java基础-面向对象一、面向对象和面相过程二、类的定义三、对象的使用四、手机类的创建和使用五、单个对象的内存图六、两个引用指向同一内存图七、成员变量和局部变量八、priavte九、this关键字十、封装十一、构造方法十二、标准类一、面向对象和面相过程 对象…

童年辣条神话卫龙,首日破发“辣条第一股”,跌超10亿

“辣条第一股”的神话破了? 今日(12月15日)“辣条大王”卫龙美味全球控股有限公司(下称“卫龙”,09985.HK)正式挂牌港交所,但上市首日即遭破发。 作为千禧一代撑起的童年“神话”,…

GNN Algorithms (1): DeepWalk

DeepWalk Concept 图表示Graph Embedding based on Random Walk -> Graph GNN based neighbor aggregation. Graph Embedding使用低维稠密向量的形式表示图中的节点,使得在原始图中相似的节点在低维表达空间中也相似。 DeepWalk关键基础是Random Walk和word…

Hubbell EDI 855 采购订单确认报文详解

Hubbell于纽约证券交易所上市,全球员工近12000名,在欧美地区以其高品质获得人们的青睐,成为家喻户晓的品牌,同类产品占有份额达95%以上。 在数字化的今天,HUBBELL延续了在一个多世纪前建立的增长和创新传统&#xff0…

Sql Server 生成 Word 文档 表结构

打开数据库编辑器,输入以下代码并执行(F5) SELECT 表名 case when a.colorder1 then d.name else end, 表说明 case when a.colorder1 then isnull(f.value,) else end, 序号 a.colorder, 列名 a.name, …

QT6+CloudCompare显示3D点云

CloudCompare是一个三维点云(网格)编辑和处理软件。最初,它被设计用来对稠密的三维点云进行直接比较。它依赖于一种特定的八叉树结构,在进行点云对比这类任务时具有出色的性能。此外,由于大多数点云都是由地面激光扫描…

文本转语音免费 微软Azure官网,在线就可以转语音。

使用跨 140 种语言和变体的 400 种神经网络语音吸引全球受众。使用极具表现力和类似人类的声音,使文本阅读器和已启用语音的助理等方案栩栩如生。神经网络文本转语音支持多种朗读风格,包括新闻广播、客户服务、呼喊、耳语以及高兴、悲伤等情感。 地址 文…

【Java寒假打卡】Java基础-数组学习笔记

【Java寒假打卡】Java基础-数组学习笔记一、定义二、定义格式三、数组动态初始化四、数组元素访问五、内存分配六、多个数组的不同内存图七、数组的静态初始化八、数组操作的两个小问题九、求数组的最大值十、查找数组的特定值一、定义 数组是一个容器,存储一种数组…

6 CPP之C风格字符串

CPP之C风格字符串 c中的string类,封装了C风格的字符串。 使用方便,能自动扩展,不用担心内存问题 在某些场景中,C风格字符串更方便,更高效 C标准库、Linux系统和开源库,大部分开源库一定有C语言版本&…

Vue前端浏览器链接/接口参数实现加密

场景 由于项目创建之前后端设计不合理,导致详情页链接参数id为顺序序数(例:1,2,3…等等),安全系数非常低(虽然我们前端做了菜单权限、按钮权限、Api权限等等),现在要前端解决下浏览器链接/接口参数实现加密…

《Linux运维总结:基于xtrabackup8工具全量物理备份Mysql8数据自动化工具(方案一)》

一、背景信息 说明:由于业务系统的特殊性,对数据的备份要求非常高,且数据量非常大,所以这里采用xtrabackup工具来对Mysql数据库进行全量物理备份。由于xtrabackup工具操作复杂,这里为了简便,基于xtrabackup…

张驰咨询:快速提高流程效率的5个关键精益生产工具

精益,又称“精益制造”或“精益生产”,注重通过消除浪费、消除缺陷,实现客户价值最大化。精益工具是关于理解过程,发现浪费,防止错误和记录你所做的事情。 让我们来看看流程改进中使用的五种精益工具,它们…

建立企业数据共享机制,打破数据壁垒

很多人可能也比较疑惑,为什么数据这么重要,能够有着数据治理、数据标准、数据管理以及我们接下来要讲的数据共享,各种针对数据的机制体系。一方面是因为数据在数字经济和数字化转型进程中发挥了巨大作用,甚至可以称得上是两者的核…

RCNN网络源码解读(Ⅰ) --- 获取数据并预处理数据

目录 1.RCNN是什么东西 2.处理数据集 2.1 code:下载VOC数据集(pascal_voc.py) 2.2 code: 数据集预处理(pascal_voc_car.py) 3.code区域候选建议(selectivesearch.py) 1.RCNN是什…

Web(十)JavaScript知识训练-JS函数

1、下列选项中,( B)可用于检查某个值是否为无穷大的数。 A、 isNaN() B、 isFinite() C、 parseInt() D、 parseFloat() 2、函数parseInt(15.36)…

燕东微在科创板上市:市值263亿元,北京电控、亦庄国投等为股东

12月16日,北京燕东微电子股份有限公司(下称“燕东微”,SH:688172)在上海证券交易所科创板上市。本次在上市,燕东微的发行价为21.98元/股,募资总额约为39.53亿元,募资净额约为37.57亿元&#xff…

【Java寒假打卡】Java基础-方法

【Java寒假打卡】Java基础-方法一、定义二、方法的定义和调用三、方法调用过程四、带参数的方法和调用五、debug查看方法参数传递六、带返回值的方法的调用七、方法重载八、方法传递数据九、返回一个数组的最大值和最小值一、定义 方法就是一段具有独立功能的代码块&#xff0…

Java中的Set系列集合

Set系列集合Set系列集合Set系列集合概述HashSet元素的底层原理:哈希表HashSet元素去重复的底层原理实现类:LinkedHashSet实现类:TreeSetCollection体系的特点、使用场景终结补充知识:可变参数集合工具类CollectionsCollection体系…