目录
使用挂载宿主机目录方式获取宿主机信息
在启动容器的时候,挂载/proc/目录到指定目录,注意容器容也有proc目录,容器中不可再用/proc目录,然后根据cpuinfo或者其他文件自己提取数据再算出来
将/proc目录挂载到容器的/hostinfo/proc目录,然后读取文件来提取信息
/** 系统信息
* @return array
*/
public function info(){
//cpu(通过挂载宿主机/proc 至 /hostinfo/proc)
$cpu_info = shell_exec("grep -m 1 'model name' /hostinfo/proc/cpuinfo");
$cpu_name = str_replace(["model name\t: ","\n"],'',$cpu_info);
//内存(通过挂载宿主机/proc 至 /hostinfo/proc)
$mem_free_info = shell_exec("grep MemFree /hostinfo/proc/meminfo");
preg_match('/[1-9]+/', $mem_free_info, $match);
$mem_free = ceil(Arr::get($match, 0));
$mem_available_info = shell_exec("grep MemAvailable /hostinfo/proc/meminfo");
preg_match('/[1-9]+/', $mem_available_info, $match3);
$mem_available = ceil(Arr::get($match3, 0));
$mem_total_info = shell_exec("grep MemTotal /hostinfo/proc/meminfo");
preg_match('/[1-9]+/', $mem_total_info, $match2);
$mem_total = ceil(Arr::get($match2, 0));
$mem_used = $mem_total - $mem_free - $mem_available;
$mem_info = [
'total' => $mem_total . 'kB',
'use' => $mem_used . 'kB',
'percent' => ($mem_total > 0) ? (round(($mem_used / $mem_total), 3) * 100) . '%' : '0%',
];
//磁盘(通过挂载宿主机的定时刷新文件获取硬盘信息)
$disk = file_get_contents(dirname(dirname(app_path())) . '/diskinfo');
$disk = explode("\n", $disk);
$disk = array_shift($disk);
$disk_arr = explode(',', trim($disk, "\n"));
$disk_info = [
'total' => Arr::get($disk_arr, 0),
'use' => Arr::get($disk_arr, 1),
'percent' => Arr::get($disk_arr, 3),
];
$data = [
'cpu_info' => [
'name' => $cpu_name,
'percent' => $this->getCpuPercent(),
],
$mem_info,
$disk_info
];
return [200,'success',$data];
}
在容器中使用ssh连接到主机获取主机信息
// An highlighted block
# apk update //进入容器后首先更新
# apk add openssh-client //安装ssh客户端,只需要客户端就可以连接其他主机,不需要安装server
# apk add sshpass //安装sshpass,ssh不能指定登录密码,需要sshpass协助
# sshpass -p "123456" ssh root@192.168.0.61 "df -h" //-p后面是ssh登录密码,“df -h“是需要执行的命令
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 50G 11G 40G 21% /
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs 3.8G 9.4M 3.8G 1% /run
tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
/dev/sda1 1014M 146M 869M 15% /boot
/dev/mapper/centos-home 407G 56G 352G 14% /home
tmpfs 775M 0 775M 0% /run/user/0
overlay 407G 56G 352G 14% /home/docker_data/overlay2/8ed720bb28e71a9551d0571ded60cddcd469f61bd95b5f9b9a0a2e20e40ec6fa/merged
shm 64M 0 64M 0% /home/docker_data/containers/47a4d4dbe861507477ee11a5e65e9c073d2a2e336e63f5626de15c2fbf06160f/mounts/shm
overlay 407G 56G 352G 14% /home/docker_data/overlay2/3d994d13d288265c90f7aabc4d311db50ee8b53228ee2635ca43035e8ac41b7e/merged
shm 64M 0 64M 0% /home/docker_data/containers/185f01c2ad42b84a411b0c36e1d6f36ef94febb3ce0dfed0794a5f039a56ae98/mounts/shm
overlay 407G 56G 352G 14% /home/docker_data/overlay2/43a4cc3ef35ebe63fa79f7155e0ab50cb9b11aa452d11eb4377f1ab35175c8d9/merged
shm 64M 0 64M 0% /home/docker_data/containers/66d9f7dd4c73454d0c46197e2bbd55a6bda5bff354f1b2a9eff78abbe678652e/mounts/shm
overlay 407G 56G 352G 14% /home/docker_data/overlay2/068c6c7e432c1a234ef7e0dd6dc2e1bf4bdcf666be6e081cdde2cbe085a0c217/merged
shm 64M 0 64M 0% /home/docker_data/containers/5e46d1659245ef3a8c6c59a35cbcbd2cfeb4c4b432d5391721fd6aabc835339d/mounts/shm
overlay 407G 56G 352G 14% /home/docker_data/overlay2/2c5ebdd0afcc4b97fb159f81dd6adf753a5c3523b4ac4f59485c6a8105da06b6/merged
shm 64M 0 64M 0% /home/docker_data/containers/d7661a53104d6862e94e51df70fb6b80e4c22fe8e5952fd38e4727628d565299/mounts/shm