Docker 是什么
学习目标
- 理解 Docker 解决什么问题
- 理解容器 vs 镜像
- 了解 Docker 的核心概念
核心概念
一句话解释
Docker 是一个把应用和它的运行环境打包成一个轻量级"容器"的工具。
解决什么问题
开发环境 生产环境
┌──────────┐ ┌──────────┐
│ Python │ │ Python │
│ 3.9 │ ≠ │ 3.7 │ ← 版本不同
│ Ubuntu │ │ CentOS │ ← 系统不同
│ 有 nginx │ │ 没 nginx │ ← 依赖不同
└──────────┘ └──────────┘
"在我机器上能跑啊!" ← 经典开发/运维矛盾
Docker 的解决方案:
┌─────────────────────────────┐
│ Docker 容器 │
│ ┌───────────────────────┐ │
│ │ Python 3.9 │ │
│ │ nginx 1.21 │ │
│ │ Ubuntu 基础库 │ │
│ │ 你的应用代码 │ │
│ └───────────────────────┘ │
└─────────────────────────────┘
开发、测试、生产环境完全一致
核心概念
| 概念 | 类比 | 说明 |
|---|---|---|
| 镜像 (Image) | 菜谱 | 只读模板,定义容器的内容 |
| 容器 (Container) | 菜 | 镜像的运行实例 |
| 仓库 (Registry) | 菜谱商店 | 存放镜像的地方(如 Docker Hub) |
镜像 (Image) 容器 (Container)
┌──────────┐ ┌──────────┐
│ nginx │ run → │ nginx │ ← 运行中
│ 1.21 │ │ PID: 42 │
│ 配置文件 │ │ 端口: 80 │
└──────────┘ └──────────┘
只读 可写
Docker vs 传统部署
| 方面 | 传统部署 | Docker |
|---|---|---|
| 环境一致性 | 难以保证 | 完全一致 |
| 启动速度 | 分钟级 | 秒级 |
| 资源占用 | 虚拟机开销大 | 共享内核,轻量 |
| 隔离性 | 依赖系统隔离 | 进程级隔离 |
| 扩展 | 手动部署 | 一行命令复制 |
实际应用场景
1. 开发环境统一
- 新人入职:docker compose up 一键启动
2. CI/CD
- 构建镜像 → 测试 → 部署,全流程一致
3. 微服务
- 每个服务一个容器,独立部署扩展
4. 快速原型
- 试用新软件:docker run mysql,用完即删
实践练习
练习 1:理解概念
回答以下问题:
- 镜像和容器的关系是什么?
- 为什么 Docker 比虚拟机更轻量?
- Docker Hub 的作用是什么?
练习 2:画图
画出 Docker 的核心架构:Client → Daemon → Registry → Container
常见误解
1. Docker 不是虚拟机
虚拟机:
┌─────────────────┐
│ Guest OS │ ← 完整操作系统,GB 级
│ App │
└─────────────────┘
Docker 容器:
┌─────────┐
│ App │ ← 只有应用和依赖,MB 级
└─────────┘
共享宿主机内核
2. 容器不是"轻量虚拟机"
容器本质是受限制的 Linux 进程,不是虚拟化的机器。
小结
| 要点 | 说明 |
|---|---|
| Docker | 打包应用+环境为容器的工具 |
| 镜像 | 只读模板(菜谱) |
| 容器 | 运行实例(菜) |
| 仓库 | 镜像存储(菜谱商店) |
| 核心价值 | 环境一致性、快速部署、资源高效 |