Docker容器内部获取宿主机CPU、磁盘、网卡等信息

本文介绍两种在Docker容器内获取宿主机CPU、磁盘和网卡信息的方法:一是通过挂载宿主机的/proc目录到容器;二是利用SSH从容器远程连接宿主机执行相关命令。


这里提供一个获取宿主机的思路,具体的代码根据需求自己实现

一、使用挂载宿主机目录方式获取宿主机信息

在启动容器的时候,挂载/proc/目录到指定目录,注意容器容也有proc目录,容器中不可再用/proc目录,然后根据cpuinfo或者其他文件自己提取数据再算出来,个人感觉比较麻烦

docker run -it -v /proc:/hostinfo/proc 镜像名

将/proc目录挂载到容器的/hostinfo/proc目录,然后读取文件来提取信息
如提取cpu使用率,参见:http://www.blogjava.net/fjzag/articles/317773.html
其他信息类似

二、在容器中使用ssh连接到主机获取主机信息

下面就以alpine系统为例介绍一下,当然其他centos,Ubuntu等也都类似

// 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
<think>我们正在讨论IT技术中的两个关键术语:容器(Container)和宿主机(Host)。在容器化技术(如Docker)中,这两个概念是基础且核心的。 ### 1. 宿主机(Host) 宿主机指的是运行容器化环境的物理或虚拟机器。它是容器运行的基础平台,提供了操作系统、硬件资源(CPU、内存、存储等)以及容器运行时(如Docker Engine)。宿主机上安装有容器管理软件,负责创建、运行和管理容器。 关键点: - **物理存在**:宿主机可以是物理服务器,也可以是虚拟机(VM)。 - **资源提供者**:为容器提供计算、存储和网络资源。 - **管理容器**:通过容器引擎(如Docker)管理容器的生命周期。 ### 2. 容器(Container) 容器是一种轻量级的虚拟化技术,它允许应用程序及其依赖在一个隔离的环境中运行。容器共享宿主机的操作系统内核,但拥有独立的文件系统、网络配置和进程空间。容器镜像(Image)是容器的模板,定义了运行环境和应用程序。 关键点: - **轻量级**:与虚拟机相比,容器不需要完整的操作系统,因此启动更快、资源开销更小。 - **隔离性**:每个容器拥有独立的运行环境,互不干扰。 - **可移植性**:容器镜像可以在任何支持容器运行时的环境中部署。 ### 3. 容器宿主机的区别 | 特性 | 宿主机 | 容器 | |--------------|--------------------------------------------|--------------------------------------------| | **资源占用** | 完整的操作系统,资源占用大 | 共享宿主机内核,资源占用小 | | **启动速度** | 启动较慢(需启动整个操作系统) | 启动快(秒级) | | **隔离级别** | 强隔离(虚拟机级别) | 进程级别隔离(通过cgroups和namespace实现) | | **部署单位** | 物理机或虚拟机 | 应用程序及其依赖 | ### 4. 容器与虚拟机(VM)的区别 容器常与虚拟机比较,但两者有本质区别: - **虚拟机**:每个VM包含完整的操作系统和应用程序,运行在Hypervisor之上。 - **容器**:多个容器共享宿主机的操作系统内核,通过容器引擎直接运行在宿主机上。 图示: ``` +---------------------+ +---------------------+ | 虚拟机1 | | 虚拟机2 | | +-----------------+ | | +-----------------+ | | | Guest OS | | | | Guest OS | | | | +-------------+ | | | | +-------------+ | | | | | App1 | | | | | | App2 | | | | | +-------------+ | | | | +-------------+ | | | +-----------------+ | | +-----------------+ | +---------------------+ +---------------------+ | Hypervisor | 或 | Host OS | +---------------------+----+---------------------+ | 宿主机硬件 | +--------------------------+ 对比 +---------------------+ | 宿主机OS | | +-----------------+ | | | 容器引擎 | | | | +-----+ +-----+ | | | | |容器1| |容器2| | | | | |App1| |App2| | | | | +-----+ +-----+ | | | +-----------------+ | +---------------------+ | 宿主机硬件 | +---------------------+ ``` ### 5. 容器宿主机的交互 - **资源访问**:容器通过宿主机内核访问硬件资源。 - **网络**:容器可以有自己的IP地址,但通常通过宿主机端口映射(Port Mapping)对外提供服务[^2]。 - **存储**:容器可以使用宿主机目录(Bind Mounts)或卷(Volumes)持久化数据[^2]。 ### 6. 安全性考虑 - **权限隔离**:容器内的root用户权限被限制,通常不会拥有宿主机的root权限[^1]。 - **攻击面**:由于共享内核,容器逃逸(Container Escape)漏洞可能导致宿主机被攻击。 ### 总结 - **宿主机**:提供运行环境的物理或虚拟机器。 - **容器**:轻量级的应用隔离环境,共享宿主机内核。 容器技术(如Docker)通过高效利用资源、快速部署和可移植性,成为现代应用开发和部署的重要工具。 §§相关问题§§ 1. 容器与虚拟机在性能上有哪些具体差异? 2. 如何配置容器宿主机之间的网络通信? 3. 容器逃逸漏洞的原理是什么?如何防范?</think>### 容器(Container)与宿主机(Host)详解 #### 1. **宿主机(Host)** - **定义**: 宿主机指运行容器化环境的**物理或虚拟机器**,是容器运行的底层平台。它提供操作系统内核、硬件资源(CPU/内存/存储)和容器运行时(如 Docker Engine)。 - **核心特性**: - **资源提供者**:为容器分配计算资源(如通过 Linux cgroups 限制 CPU 使用率)[^1]。 - **权限隔离**:宿主机的 root 用户与容器内的 root 用户权限不同(容器内 root 受限)[^1]。 - **网络基础**:容器网络通过宿主机网卡实现(如 Docker 默认创建 `docker0` 虚拟网桥)[^3]。 - **典型场景**: 物理服务器、云虚拟机(AWS EC2)、本地开发机等。 #### 2. **容器(Container)** - **定义**: 基于镜像创建的**轻量级隔离进程**,包含应用代码、依赖库和运行环境,共享宿主机内核。 - **核心特性**: - **轻量化**:无需完整操作系统,启动速度达秒级(对比虚拟机分钟级)。 - **隔离性**:通过 Linux Namespace 实现资源隔离(PID/网络/文件系统隔离)。 - **可移植性**:镜像可在任何支持容器运行时的宿主机部署。 - **技术实现**: 例如 Docker 容器使用联合文件系统(OverlayFS)管理分层镜像。 #### 3. **关键区别** | 特性 | 宿主机 | 容器 | |--------------|----------------------------|--------------------------| | **资源层级** | 物理/虚拟硬件层 | 进程级虚拟化 | | **启动速度** | 慢(需引导操作系统) | 快(秒级启动) | | **资源开销** | 高(完整 OS 占用) | 低(共享内核,MB 级内存)| | **隔离强度** | 强(硬件级隔离) | 中(进程级隔离) | | **权限控制** | 完全系统权限 | 受限权限(Capabilities) | #### 4. **交互关系** - **存储交互**: 容器通过**卷(Volumes)** 或**绑定挂载(Bind Mounts)** 访问宿主机文件系统[^2]。 ```bash # 绑定挂载示例:将宿主机目录映射到容器 docker run -v /host/data:/container/data nginx ``` - **网络交互**: 容器通过宿主机端口映射暴露服务: ```bash # 将容器80端口映射到宿主机8080端口 docker run -p 8080:80 nginx ``` - **安全边界**: 容器逃逸(CVE-2019-5736 等漏洞)可能突破隔离访问宿主机[^1]。 #### 5. **应用场景对比** - **宿主机适用**: 需要直接管理硬件、运行内核模块或高安全隔离的场景(如数据库服务器)。 - **容器适用**: 微服务架构、CI/CD 流水线、开发环境标准化(如通过 Docker Compose 编排多容器应用)。 --- ### 概念关系图 ```mermaid graph LR A[宿主机] -->|提供资源| B(容器引擎) B --> C[容器1] B --> D[容器2] B --> E[容器3] A -->|网络转发| F[外部网络] C -->|共享内核| A D -->|卷存储| G[(宿主机磁盘)] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值