前言
这两年"云原生"(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 篇。