【容器技术】虚拟化原理与Docker详解

虚拟化与容器技术详解

一、虚拟化(Virtualization)

虚拟化 是一种将物理计算资源(如 CPU、内存、存储、网络)抽象、转换和分割的技术,使得多个虚拟环境可以在同一台物理硬件上独立运行。

常见类型:

  • 服务器虚拟化:如 VMware ESXi、KVM、Hyper-V
  • 桌面虚拟化:如 VirtualBox、VMware Workstation
  • 网络/存储虚拟化:SDN、分布式存储等

二、虚拟化的作用

作用 说明
资源利用率提升 一台物理服务器可运行多个虚拟机(VM),避免"一机一应用"的资源浪费
环境隔离 每个 VM 拥有独立的操作系统、内核、进程空间,互不影响
快速部署与迁移 VM 可打包为镜像,秒级克隆、跨主机迁移(如 vMotion)
高可用与灾备 支持快照、备份、故障自动切换
开发测试便利 快速创建不同操作系统环境(如 Windows + Linux 共存)

典型场景:企业数据中心用 10 台物理服务器虚拟出 100+ 台 VM,承载各类业务系统。


三、容器的基本定义

容器(Container) 是一种轻量级、可移植、自包含的软件打包技术,它将应用程序及其所有依赖(代码、运行时、库、配置)打包在一起,并在共享宿主机操作系统内核的基础上实现进程级隔离。

核心特点:

  • 轻量:启动速度秒级,资源开销极低(无 Guest OS)
  • 标准化:一次构建,随处运行(Build Once, Run Anywhere)
  • 隔离性:通过 Linux Namespace 和 Cgroups 实现进程、网络、文件系统等隔离
  • 不可变基础设施:容器本身是临时的,状态应外置(如 Volume、数据库)

代表技术:Docker、containerd、Podman


四、容器 vs 虚拟化:关键区别

对比维度 传统虚拟化(VM) 容器(Container)
架构层级 硬件 → Hypervisor → Guest OS → 应用 硬件 → Host OS → 容器引擎 → 应用
操作系统 每个 VM 运行完整 Guest OS(含内核) 所有容器共享宿主机内核
启动速度 分钟级(需启动 OS) 秒级甚至毫秒级
资源开销 高(每个 VM 占用 CPU/内存/磁盘) 极低(仅应用本身资源)
隔离强度 强(硬件级隔离) 中(进程级隔离,依赖内核安全)
密度 单机通常运行 10~50 个 VM 单机可运行 数百个容器
适用场景 运行不同 OS、强安全隔离 微服务、CI/CD、弹性扩缩容

架构图对比:

复制代码
传统虚拟化:
┌──────────────┐
│   应用程序    │
├──────────────┤
│   Guest OS   │ ← 每个 VM 都有完整操作系统
├──────────────┤
│   Hypervisor │ ← VMware / KVM / Hyper-V
├──────────────┤
│   物理硬件    │
└──────────────┘

容器化:
┌──────────────┐
│   应用程序    │
├──────────────┤
│   容器引擎     │ ← Docker / containerd
├──────────────┤
│   Host OS    │ ← 所有容器共享同一个内核
├──────────────┤
│   物理硬件    │
└──────────────┘

总结

  • 虚拟化 = "虚拟整台电脑"
  • 容器 = "虚拟一个进程"

五、容器的安装(以 Docker 为例)

以下以 CentOS 7/8/9 或 Rocky Linux 为例,其他系统(Ubuntu、Debian)类似。

步骤 1:卸载旧版本(如有)

复制代码
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

步骤 2:安装依赖工具

复制代码
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

步骤 3:添加 Docker 官方仓库

复制代码
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

步骤 4:安装 Docker 引擎

复制代码
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

步骤 5:启动并设置开机自启

复制代码
sudo systemctl start docker
sudo systemctl enable docker

步骤 6:验证安装

复制代码
docker --version
# 输出:Docker version 25.0.3, build 4413cf3

# 运行测试容器
sudo docker run hello-world

如果看到 Hello from Docker!,说明安装成功!

(可选)免 sudo 使用 Docker

复制代码
sudo usermod -aG docker $USER
# 退出终端重新登录生效

六、补充说明:容器 ≠ Docker

  • Docker 是最流行的容器实现工具,但不是唯一。
  • 容器底层依赖 Linux 内核特性:
    • Namespaces:实现 PID、NET、MNT、UTS、IPC 等隔离
    • Cgroups:限制 CPU、内存、IO 等资源使用
  • 其他容器运行时:containerd(Kubernetes 默认)、Podman(无守护进程)、CRI-O

总结

技术 本质 优势 局限
虚拟化 模拟完整计算机 强隔离、支持多 OS 资源重、启动慢
容器 隔离的进程环境 轻量、快速、高密度 依赖 Linux 内核,隔离较弱

趋势

  • 传统业务 → 虚拟化(VM)
  • 云原生/微服务 → 容器(Docker + Kubernetes)
  • 混合架构:VM 中运行 Kubernetes 集群(如 OpenStack + K8s)
相关推荐
用户0328472220701 天前
如何搭建本地yum源(上)
运维
武子康1 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉4 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造