一、为什么容器基础概念一定要先搞清楚¶
容器体系里有很多词看起来很像,比如镜像和容器、仓库和镜像地址、虚拟机和容器。如果一开始不把这些概念区分开,后面在看 docker pull、docker run、kubectl 和镜像仓库配置时会非常容易混乱。
所以学习顺序最好是:
- 先区分物理机、虚拟机和容器
- 再区分镜像、容器和镜像仓库
- 最后理解镜像地址是怎么组成的
二、物理机、虚拟机、容器到底有什么区别¶
2.1 物理机¶
物理机就是一台真实存在的服务器,CPU、内存、磁盘等资源都直接由这台设备提供。
它的特点是:
- 资源独占
- 结构直观
- 隔离天然
但缺点也很明显:灵活性低,扩展慢,资源利用率通常不高。
2.2 虚拟机¶
虚拟机是在物理机之上,通过虚拟化技术切分出来的多个逻辑主机。每个虚拟机都能运行自己的完整操作系统。
它的优点包括:
- 隔离性较强
- 一台物理机可以运行多个环境
- 部署和迁移效率明显高于纯物理机
但虚拟机依然比较重,因为每个实例都需要带一套完整系统。
2.3 容器¶
容器比虚拟机更轻,它直接共享宿主机内核,只封装应用及其必要依赖。
因此容器往往具备这些优势:
- 启动速度快
- 资源开销小
- 环境一致性好
- 可移植性强
如果用一个很形象的比喻:
- 物理机像一整栋独立房子
- 虚拟机像一栋楼里装修完整的多套住宅
- 容器像同一套建筑结构内划分出的高效功能隔间
三、镜像、容器、镜像仓库怎么区分¶
这是容器学习中最核心的一组基础概念。
3.1 镜像是什么¶
镜像可以理解为应用的标准化安装包,它里面包含:
- 应用程序本身
- 运行环境
- 依赖库
- 启动所需的文件结构
镜像本身通常是只读模板,用来创建容器。
3.2 容器是什么¶
容器是镜像运行起来后的实例。
也就是说:
- 镜像是模板
- 容器是运行中的对象
同一个镜像可以启动多个容器,就像同一个安装包可以在不同环境里被多次安装和运行。
3.3 镜像仓库是什么¶
镜像仓库是存放和分发镜像的地方。
它的作用相当于应用商店或制品仓库,既可以下载别人发布的镜像,也可以上传自己构建的镜像。
常见仓库包括:
- Harbor:
https://goharbor.io/ - 阿里云容器镜像服务:
https://cr.console.aliyun.com/ - Docker Hub:
https://hub.docker.com/
四、镜像地址为什么要看懂¶
很多初学者会直接复制镜像地址使用,但如果不理解镜像地址结构,后面在配置私有仓库、迁移镜像或排查拉取失败时会很被动。
一个完整镜像地址通常由四部分组成:
- 注册表地址
- 命名空间
- 仓库名称
- 标签
例如:
gcr.k8s.io/coreos/prometheus-adapter:0.8
可以拆解为:
- 注册表地址:
gcr.k8s.io - 命名空间:
coreos - 仓库名称:
prometheus-adapter - 标签:
0.8
如果不写标签,很多场景下默认会使用 latest;如果不指定注册表地址,通常会走默认公共仓库逻辑。
五、容器为什么会成为主流¶
容器之所以成为现代应用交付的主流方案,不只是因为它“新”,而是因为它刚好解决了传统交付模式中的几个痛点。
5.1 一次构建,到处运行¶
容器把应用和依赖一起封装,减少了“开发环境能跑、生产环境跑不起来”的问题。
5.2 环境一致性更强¶
从开发、测试到生产,运行环境更加统一,部署差异显著降低。
5.3 可移植性更好¶
只要底层运行时兼容,容器就可以在不同主机和不同云平台之间迁移。
5.4 资源利用率更高¶
容器共享宿主机内核,资源损耗比虚拟机小,更适合高密度部署。
5.5 启动和交付更快¶
秒级启动和标准化镜像分发,让现代应用发布速度大幅提升。
5.6 隔离粒度更细¶
虽然隔离性通常不如虚拟机那么强,但在很多业务场景里已经足够,并且换来了更高效率。
六、学习容器时最应该记住的三组关系¶
学到这里,最好把下面三组关系牢牢记住:
6.1 物理机、虚拟机、容器¶
- 物理机是实体资源
- 虚拟机是在实体资源上切出来的完整系统实例
- 容器是在共享内核前提下封装应用的轻量运行单元
6.2 镜像、容器、仓库¶
- 镜像是模板
- 容器是实例
- 仓库是分发中心
6.3 拉取、运行、上传¶
pull是从仓库把镜像拉到本地run是基于镜像启动容器push是把本地镜像上传到仓库
这三组关系一旦清楚,后面学习 Docker 命令、镜像管理和 Kubernetes 工作负载时,理解成本会大幅下降。