学习目标: 理解云计算的服务分层模型,掌握Docker容器的基本使用,了解Kubernetes的入门概念。
14.1 云计算究竟是什么?
一句话: 云计算就是把计算资源(服务器、存储、网络)像水电一样按需使用、按量付费。
20年前想做一个网站:买物理服务器→放到机房→装系统→配网络→申请公网IP,整个过程可能要几周。
今天想做一个网站:打开云平台控制台→点几下鼠标→5分钟后一台云服务器就好了。
云计算的核心特征
| 特征 | 说明 |
|---|---|
| 按需自助 | 无需人工交互,网页/API即可获取资源 |
| 广泛的网络接入 | 手机、电脑、平板都能访问 |
| 资源池化 | 多租户共享物理资源,逻辑隔离 |
| 弹性伸缩 | 流量大了自动加机器,流量小了自动释放 |
| 计量计费 | 像水电一样按用量收费 |
14.2 云计算的服务分层:IaaS / PaaS / SaaS
把这三种模式想象成吃披萨:
- 🍕 自己做(IaaS):你买面粉、番茄、奶酪,和面、烤制全自己来。拥有最大自由度,但也最累。
- 🍕 买半成品(PaaS):你买现成的披萨饼底和酱料,只需要放上配料和烤制。
- 🍕 叫外卖(SaaS):披萨直接送到嘴边,你只管吃。
IaaS(基础设施即服务)
你管理: 操作系统及以上(应用、数据、运行时)
云厂商管理: 机房、物理服务器、网络、虚拟化
代表产品:
- 阿里云 ECS / 腾讯云 CVM
- AWS EC2
- Azure Virtual Machines
适用场景: 你需要完全控制服务器环境,自行安装软件、配置系统。
# IaaS的典型使用方式:SSH登录云服务器
ssh root@your-server-ip
# 装什么、怎么配,全由你决定
apt update && apt install nginx mysql-server python3
PaaS(平台即服务)
你管理: 只有你的应用代码和数据
云厂商管理: 操作系统、运行时、中间件
代表产品:
- 阿里云函数计算(FC)/ SAE
- Vercel / Netlify(前端托管)
- Heroku(传统PaaS先驱)
适用场景: 你只想写代码,不想管服务器。代码push上去自动部署运行。
# PaaS的典型使用方式:Vercel部署前端项目
vercel deploy
# 一行命令,域名、HTTPS、CDN全搞定
SaaS(软件即服务)
你只管用软件,其他全是厂商的事。
代表产品:
- 飞书、钉钉(办公协作)
- Google Workspace(文档、邮件、日历)
- GitHub(代码托管)
一句话区分三者:
| IaaS | PaaS | SaaS | |
|---|---|---|---|
| 你的工作 | 从OS开始搭建 | 写代码部署 | 开箱即用 |
| 给你的 | 虚拟服务器 | 运行环境 | 完整软件 |
| 灵活性 | 最高 | 中 | 低 |
| 管理负担 | 最高 | 中 | 最低 |
14.3 主流云平台对比
| 维度 | 阿里云 | AWS | Azure |
|---|---|---|---|
| 国内访问 | ⭐⭐⭐⭐⭐ 极快 | ⭐⭐ 较慢 | ⭐⭐ 较慢 |
| 国际覆盖 | ⭐⭐ 以亚洲为主 | ⭐⭐⭐⭐⭐ 全球领先 | ⭐⭐⭐⭐ 全球覆盖 |
| 备案支持 | ✅ 完善 | ❌ 不涉及 | ❌ 不涉及 |
| 生态 | 国内SME首选 | 互联网企业首选 | 微软生态内首选 |
| 免费试用 | 部分产品有免费额度 | 12个月免费套餐 | 12个月免费+200美元额度 |
| 适合新手 | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
选型建议:
- 如果主要服务国内用户:阿里云/腾讯云,速度快且备案方便
- 如果想学国际主流技术:AWS,文档丰富,教程最多
- 如果公司用微软全家桶:Azure,天然集成Office 365/Active Directory
14.4 Docker容器基础
虚拟机 vs 容器
这是理解Docker的关键:
虚拟机架构: Docker容器架构:
┌──────────────┐ ┌──────────────┐
│ 应用 A │ │ 容器A │容器B │
├──────────────┤ ├──────────────┤
│ 操作系统 │ │ Docker引擎 │
├──────────────┤ ├──────────────┤
│ 虚拟硬件 │ │ 宿主机OS │
├──────────────┤ ├──────────────┤
│ Hypervisor │ │ 物理硬件 │
├──────────────┤ └──────────────┘
│ 物理硬件 │
└──────────────┘
| 虚拟机 | Docker容器 | |
|---|---|---|
| 启动速度 | 分钟级 | 秒级甚至毫秒级 |
| 占用资源 | GB级内存 | MB级 |
| 隔离程度 | 完全隔离 | 进程级隔离 |
| 迁移部署 | 镜像大(几GB) | 镜像小(几十MB) |
| 操作系统 | 每个VM一套完整OS | 共享宿主机内核 |
比喻: 虚拟机是在一块地上盖多栋独立别墅(各有地基),Docker是在一栋楼里分出多个公寓房间(共享地基和水电)。
Docker核心概念:镜像、容器、仓库
Dockerfile ──build──▶ 镜像(Image) ──run──▶ 容器(Container)
│ │ │
│ push/pull start/stop/rm
│ │ │
└──────────────────────┴──▶ Registry(仓库) ◀──┘
- 镜像(Image):一个只读模板,包含运行应用所需的一切(代码、运行时、库、环境变量)
- 容器(Container):镜像的运行实例。可以启动、停止、删除
- 仓库(Registry):存放镜像的地方。Docker Hub是最大的公共仓库(类似GitHub之于代码)
常用Docker命令
# === 镜像操作 ===
docker pull python:3.12 # 拉取镜像
docker images # 查看本地镜像
docker rmi python:3.12 # 删除镜像
docker build -t myapp:v1 . # 用Dockerfile构建镜像
# === 容器操作 ===
docker run -d -p 8080:80 --name web nginx
# -d: 后台运行 -p: 端口映射(主机:容器) --name: 起名
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器(包括已停止的)
docker stop web # 停止容器
docker start web # 启动已停止的容器
docker rm web # 删除容器(要先停止)
docker exec -it web bash # 进入容器内部
# === 日志与调试 ===
docker logs web # 查看容器日志
docker logs -f web # 实时跟踪日志
docker inspect web # 查看容器详细信息
Dockerfile详解
Dockerfile是一个包含构建镜像指令的文本文件。
# Dockerfile示例:一个Python Web应用
FROM python:3.12-slim # 1. 基于哪个基础镜像
WORKDIR /app # 2. 设置工作目录
COPY requirements.txt . # 3. 先复制依赖文件(利用缓存)
RUN pip install -r requirements.txt # 4. 安装依赖
COPY . . # 5. 复制应用代码
EXPOSE 5000 # 6. 声明端口(文档性质)
CMD ["python", "app.py"] # 7. 容器启动时执行的命令
优化技巧:
.dockerignore文件排除不需要的内容(node_modules/、.git/等)- 先COPY依赖文件再COPY代码,利用Docker层缓存加速构建
- 使用
python:3.12-slim而非python:3.12,镜像体积缩小一半
docker-compose:编排多个容器
单容器用docker run,多容器协同用docker-compose。
# docker-compose.yml
version: '3.8'
services:
web:
build: ./web # 从./web目录的Dockerfile构建
ports:
- "3000:3000"
depends_on:
- db # web依赖db,db先启动
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
db:
image: postgres:16 # 直接用现成镜像
environment:
- POSTGRES_PASSWORD=secret
volumes:
- pgdata:/var/lib/postgresql/data # 数据持久化
volumes:
pgdata: # 声明数据卷,容器删除数据还在
# docker-compose常用命令
docker-compose up -d # 启动所有服务(后台)
docker-compose down # 停止并删除所有服务
docker-compose logs -f web # 查看特定服务日志
docker-compose ps # 查看服务状态
docker-compose restart web # 重启单个服务
14.5 Kubernetes入门概念
当你只有几个容器时,Docker + docker-compose就够了。当你有几十个、几百个容器时,就需要Kubernetes(简称K8s)。
为什么需要K8s?
Docker只管单台机器上的容器。但是:
- 容器挂了怎么自动重启?
- 流量大了怎么自动扩容?
- 怎么样平滑地发布新版本?
- 怎么样让不同机器上的容器互相发现?
K8s就是在Docker之上的"容器集群操作系统",解决这些问题。
核心概念(一张图理解K8s)
┌─────────────────────────────────────────────┐
│ Kubernetes 集群 │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ Node (节点1) │ │
│ │ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Pod A │ │ Pod B │ ... │ │
│ │ │┌────────┐│ │┌────────┐│ │ │
│ │ ││容器1 ││ ││容器1 ││ │ │
│ │ ││容器2 ││ │└────────┘│ │ │
│ │ │└────────┘│ │ │ │ │
│ │ └──────────┘ └──────────┘ │ │
│ └──────────────────────────────────────┘ │
│ ┌──────────────────────────────────────┐ │
│ │ Node (节点2) │ │
│ │ ┌──────────┐ ... │ │
│ │ │ Pod C │ │ │
│ │ └──────────┘ │ │
│ └──────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────┐ │
│ │ 控制平面 (Master Node) │ │
│ │ API Server / Scheduler / │ │
│ │ Controller Manager / etcd │ │
│ └──────────────────────────────┘ │
└─────────────────────────────────────────────┘
核心对象:
| 对象 | 说明 | 类比 |
|---|---|---|
| Pod | K8s的最小调度单位,包含1个或多个容器 | 像一个"集装箱",里面装几个关联的容器 |
| Node | 运行Pod的物理机或虚拟机 | 像港口里的"码头工人" |
| Service | 给一组Pod提供固定的访问入口 | 像"前台接待",后面Pod怎么变,入口不变 |
| Deployment | 管理Pod的多副本和滚动更新 | 像"调度经理",确保指定数量的Pod在运行 |
| ConfigMap / Secret | 配置信息和敏感数据 | .env文件的管理版 |
Deployment配置示例(简化版)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-web-app
spec:
replicas: 3 # 始终保持3个Pod运行
selector:
matchLabels:
app: my-web-app
template:
metadata:
labels:
app: my-web-app
spec:
containers:
- name: app
image: my-web-app:v2 # 镜像版本
ports:
- containerPort: 3000
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "200m"
K8s自动帮你做的事:
- 维持
replicas: 3——一个Pod挂了自动启动新的 - 更新镜像
my-web-app:v2→v3时逐个替换Pod,不停机 - CPU/内存超限时限制,保护整个集群稳定
本地学习K8s的推荐方式
# 方法1:Minikube(单机K8s)
minikube start
kubectl get nodes
# 方法2:Kind(Kubernetes in Docker)
kind create cluster
# 方法3:K3s(轻量级K8s,适合树莓派/低配机器)
curl -sfL https://get.k3s.io | sh -
# 方法4:直接用云的托管K8s(阿里云ACK/腾讯云TKE)
# 控制台点几下就能建,省去自己搭建的麻烦
本章小结
- IaaS/PaaS/SaaS是云计算的三个抽象层级,从"自己装修"到"拎包入住"
- Docker解决了"在我机器上能跑"问题,镜像→容器→仓库是最核心的三个概念
- Dockerfile + docker-compose是每个开发者都应该掌握的技能
- K8s是生产环境的标准选择,但学习曲线陡峭——先精通Docker,再学K8s
- 学习路径:Docker命令行 → Dockerfile → docker-compose → K8s基本概念
⬅️ [上一章:13-网络安全基础](13-网络安全基础.html) | ➡️ [下一章:15-人工智能入门](15-人工智能入门.html)