1. 容器概述
什么是容器
容器(Container)是一种轻量级的虚拟化技术,他是一种轻量级、可移植、自包含的软件打包技术,用于将应用程序及其依赖环境打包成一个独立的、可移植的单元。容器通过共享宿主机的操作系统内核,实现了资源隔离和进程隔离,但比传统虚拟机更高效(无需模拟完整操作系统)。
一个容器(Container)通常是一个轻量级、可执行的独立软件包,它包含了运行某个应用程序所需的所有内容,包括:根文件系、网络、名字空间、运行时环境、系统工具、运行时库和配置等。
使用容器技术,开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。
容器的概念和轮船的集装箱的设计和理念高度相似。

容器的特点如下:
- 标准化
- 无论内部封装的是什么,外部体现都是一致的,有统一的接口。
- 隔离性:
- 每个容器内部封闭且独立,容器之间互不干扰。
- 便携性:
- 封装后的容器在不同的运行环境中无需重新配置。一次创建,处处运行。
- 效率
- 容器共享主机操作系统内核,无需为每个应用启动完整的虚拟机,资源占用极低。
- 分层与复用
- 镜像通过分层存储实现复用(如基础 Ubuntu 层 + 应用层),减少重复占用空间。
主流容器技术如下:
容器的原理
一个容器就是一个进程(可以由此进程创建多个子进程)的运行时环境,这些进程共享宿主机的操作系统内核,由操作系统统一调度管理。以后我们把容器内最先启动的进程叫 容器主进程。
容器主进程 通常是容器管理进程的子进程,容器主进程 继承了父进程(容器管理进程)的权限,并且子进程的权限一定会小于父进程的权限。
容器管理进程通过操作系统内核对命名空间(Namespaces)、 控制组(Cgroups)、 联合文件系统(UnionFS)、网络等进行隔离,让容器主进程在自己独立的环境中运行,从而达到虚拟化的效果。
容器与虚拟机的架构设计
容器和虚拟机之间的主要区别在于虚拟化层的位置和操作系统资源的使用方式。 如下图所示:
虚拟机结构

容器结构

可见,虚拟机通过 Hypervisor 层有了自己的客户端操作系统 (Guest OS), 而容器是没有操作系统的,他是通过容器引擎(Docker Engine) 来共用主机操作系统(Host OS)。
容器与虚拟机参数对比
root 权限,有一定安全隐患容器的优点
- 轻量高效:共享宿主机内核,无需虚拟化完整操作系统,资源占用少,启动速度快(秒级)
- 环境一致性:镜像打包应用及其依赖,确保开发、测试、生产环境一致,避免环境影响。
- 快速部署与扩展:支持自动化部署(CI/CD),结合编排工具(如:Kubernetes)可快速横向扩展。
- 资源隔离与限制:通过 Cgroups 限制 CPU、内存等资源,避免单个容器耗尽系统资源。
- 微服务友好:将业务拆分为独立容器,实现低耦合的微服务架构,便于开发和扩展。
容器的缺点
- 安全性较弱:共享内核,若内核漏洞被利用,可能导致容器逃逸(攻击宿主机)。
- 环境依赖:基于操作系统内核,Windows 下的镜像无法在 Linux 下运行。
- 存储与数据持久化复杂:默认容器内数据易丢失,需额外配置卷(Volume)或外部存储。
- 网络配置复杂:多容器通信需管理网络插件、端口映射等,跨主机网络更复杂。
- 不适合所有场景:对图形界面、高性能计算(HPC)或强隔离需求的应用支持较差。
本教程将以 Docker 为例对容器进行讲解。