【容器技术】虚拟化原理与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)
相关推荐
-dcr2 小时前
41.docker完整版
docker
胡斌附体2 小时前
docker健康检查使用
运维·docker·依赖·健康检查
云飞云共享云桌面2 小时前
无需配置传统电脑——智能装备工厂10个SolidWorks共享一台工作站
运维·服务器·前端·网络·算法·电脑
福尔摩斯张2 小时前
《C 语言指针从入门到精通:全面笔记 + 实战习题深度解析》(超详细)
linux·运维·服务器·c语言·开发语言·c++·算法
虚伪的空想家3 小时前
arm架构服务器使用kvm创建虚机报错,romfile “efi-virtio.rom“ is empty
linux·运维·服务器·javascript·arm开发·云原生·kvm
火车头-1103 小时前
【docker 部署nacos1.4.7】
运维·docker·容器
虾..3 小时前
Linux 进程状态
linux·运维·服务器
测试者家园3 小时前
DevOps 到底改变了测试什么?
运维·自动化测试·软件测试·devops·持续测试·智能化测试·软件测试和开发
j200103223 小时前
Docker 部署与管理
docker·容器·eureka