前言

这两年"云原生"(Cloud Native)铺天盖地,但很多同学只是"用着 Docker",却说不出容器到底解决了什么问题。这篇把概念的来龙去脉捋清楚。

一、部署方式的演进

阶段 时代 部署单元 启动速度 资源开销
物理机 ~2005 整台服务器 小时/天 100% 独占
虚拟机 2005~2013 VM 分钟级 GB 级、每个 VM 一个完整 OS
容器 2013~ 容器 秒级 MB 级、共享宿主内核
Serverless 现在 函数 毫秒级 按调用计费

每一跃迁的本质都是:部署单元更轻、边界更细、弹性更快。

二、虚拟机 vs 容器

两者都是"隔离环境",但隔离的层级完全不同:

┌─────────────────────────────┐    ┌─────────────────────────────┐
│  VM 架构                     │    │  容器架构                     │
│                             │    │                             │
│  App A   │  App B           │    │  App A   │  App B           │
│ Guest OS │  Guest OS        │    │  Bins/Libs │  Bins/Libs     │
│─────────┴──────────────────│    │───────────┴─────────────────│
│        Hypervisor            │    │     Container Engine        │
│      (KVM/ESXi)             │    │      (Docker)              │
│         Host OS              │    │         Host OS             │
│         硬件                  │    │         硬件                  │
└─────────────────────────────┘    └─────────────────────────────┘
维度 虚拟机 容器
隔离级别 硬件级(独立内核) 进程级(共享内核)
体积 几 GB~几十 GB 几 MB~几百 MB
启动 分钟 秒
密度 一台物理机几十个 一台宿主机成百上千个
安全隔离 强 相对弱(内核漏洞影响面大)
典型用途 多租户、异构 OS 应用交付、微服务、CI/CD

一句话总结:虚拟机隔离"机器",容器隔离"应用"。

三、容器到底解决了什么问题

1. “在我机器上是好的”

传统交付:源码/二进制 + 一份部署文档(装哪些依赖、改哪些配置)。环境差异是无穷无尽的坑。

容器把应用 + 依赖 + 运行时打包成镜像,走到哪都一样——镜像即交付物。

2. 环境搭建成本

# 传统方式装一个 MySQL:加源、装包、初始化、配权限……半小时
# 容器方式:
docker run -d -e MYSQL_ROOT_PASSWORD=pass mysql:8.0
# 30 秒后你有一个干净的 MySQL

3. 资源利用率

VM 每个都要跑完整 OS,闲置时内存/CPU 浪费严重;容器共享内核、按需分配,同样硬件能承载多得多的 workload。

4. 弹性与标准化

镜像不可变(Immutable)→ 扩容就是"多跑几个副本";OCI 标准化后,镜像可以在任何符合规范的引擎上运行——这是 Kubernetes 得以统治编排层的前提。

四、容器靠什么实现(预告)

容器不是"轻量虚拟机",而是被内核特性"圈起来的进程":

  • Namespace:视图隔离(pid、net、mnt、uts、ipc、user),让进程以为自己独占系统
  • Cgroup:资源限额(CPU、内存、IO),防止互相挤兑
  • 联合文件系统(overlayfs):分层镜像,多层只读层 + 顶层可写层

这三板斧的细节后续单独开一篇(详见《容器底层原理》)。

五、云原生技术版图

CNCF(云原生计算基金会)的景观图有几百个项目,抓大放小记这几块:

领域 代表项目 作用
容器运行时 Docker/containerd 跑容器
编排调度 Kubernetes 容器的"操作系统",事实标准
服务发现/网格 CoreDNS、Istio 微服务通信治理
可观测性 Prometheus、Grafana、ELK 指标、日志、链路
CI/CD GitLab CI、ArgoCD 自动化构建发布
镜像仓库 Harbor 私有镜像存储
IaC Terraform 声明式管理基础设施

云原生的核心思想:应用从设计之初就为云环境而生——弹性、可观测、松耦合、可自动化。

六、学习路线建议

1. Docker        → 会打包镜像、compose 起多容器(当前优先级最高)
2. K8s 核心对象  → Pod/Deployment/Service
3. 配置与存储    → ConfigMap/Secret/PV/PVC
4. 生态工具      → Helm、Prometheus、日志方案
5. 进阶          → 网络原理、调度策略、服务网格

小结

  • 容器 = 进程级隔离 + 镜像化交付,解决环境一致性与资源效率
  • 虚拟机隔离强、容器密度高,生产中常常组合使用(K8s 节点本身就是 VM)
  • 云原生 = 容器 + 编排 + DevOps + 微服务的方法论集合

下一篇开始动手:Docker 安装与镜像操作。


本文是「云原生」系列第 1 篇。