Appearance
1.容器
1. 什么是容器?
容器是一种轻量级、可移植、自包含的软件打包技术,用于将应用程序及其运行所需的依赖(如代码、库、配置文件)打包在一个统一的单元中运行。
可以把容器理解为:
“打包好了的应用集装箱,在任何支持容器的环境中都能运行得一样。”
容器是一种轻量级、可移植、自包含的软件打包技术,用于将应用程序及其运行所需的依赖(如代码、库、配置文件)打包在一个统一的单元中运行。
2. 容器 vs 虚拟机
特性 | 容器 | 虚拟机(VM) |
---|---|---|
启动速度 | 秒级 | 分钟级 |
资源占用 | 小(共享主机内核) | 大(独立操作系统) |
可移植性 | 高 | 一般 |
隔离性 | 高(但略低于虚拟机) | 非常高 |
3. 常见容器技术
3.1 Docker Engine
Docker Engine 是最广为人知的高层容器运行时,以其简化应用打包与部署著称。它集成了镜像管理、网络配置、存储卷挂载等功能,通过一个中央守护进程(dockerd)提供统一的 API,解决了“在我的机器上能跑”到“在任何地方都能跑”的依赖地狱问题。
特点:
配置简单、生态完善,拥有 Docker Hub 等镜像仓库。
启动速度快、资源占用低,但需要守护进程常驻。
3.2 containerd
containerd 是从 Docker Engine 中拆分出来的轻量级容器运行时,专注于镜像管理、存储、网络和容器生命周期管理。它实现了 OCI 运行时规范,供上层工具(如 Docker 或 Kubernetes)直接调用,也可独立部署。
特点:
无额外守护进程,直接通过 gRPC 提供接口。
被 Kubernetes 的 containerd 插件广泛采用,深度集成到云原生生态。
3.3 CRI-O
CRI-O 是 Red Hat 牵头的项目,实现了 Kubernetes 的容器运行时接口(CRI),并可调用任何符合 OCI 规范的底层运行时(如 runc)。它专为 Kubernetes 优化,去掉了不必要的额外功能,仅保留容器调度所需的核心子系统。
特点:
轻量、安全,专注 Kubernetes,不依赖 Docker 守护进程。
支持多种 OCI 兼容运行时,可灵活切换。
3.4 Podman
Podman 是一个无守护进程的容器引擎,兼容 Docker CLI,大多数 Docker 命令可直接替换为 podman 使用。它通过 libpod 管理容器和 Pod,支持 rootless(非特权)模式,以提高安全性。
特点:
无守护进程设计,命令执行即时启动/终止,不需后台服务。
原生支持 rootless,增强隔离与安全。
3.5 rkt
rkt(读作“rocket”)是 CoreOS 开发的安全、可组合的容器运行时,遵循 App Container Specification(appc)和 OCI 标准。它为每个容器提供独立的 stage 1 执行环境,支持无守护进程运行,并强调安全可验证。
特点:
无中央守护进程,使用 CLI 发起容器运行。
支持同时运行 Docker 镜像与 AppC 镜像,灵活性高。
3.6. LXC
LXC(Linux Containers)是基于 Linux 内核命名空间(namespaces)与控制组(cgroups)的系统级虚拟化方法,提供用户空间 API 和工具来创建完整的操作系统容器。它更接近系统虚拟机,可运行完整的 Linux 发行版。
特点:
适合需要完整 OS 环境的场景,功能强大但相对复杂。
可与 LXD 配合,提供更友好的管理层和 API。
维基百科
2.容器编排
容器编排是指在生产环境中自动管理大量容器的部署、调度、扩缩容、网络、存储和健康检查等任务的技术和工具。 可以这么理解:
一个自动管理多个容器的系统指挥官,帮助你确保服务高可用、自动扩缩容、自动恢复。
2.2 为什么需要容器编排?
当你只有 1~2 个容器时,用手动方式还可以管理。但在实际生产中,一个应用往往是由多个服务组成(比如前端、后端、数据库等),每个服务可能部署多个副本。此时你需要:
- 自动部署和更新服务
- 容器崩溃时自动重启或替换
- 负载均衡与服务发现
- 日志和监控集成
- 水平扩展和缩容
手动操作已远远不够,因此引入容器编排工具。
2.3 常见的容器编排工具
- Kubernetes(K8s): 目前最主流、最强大的容器编排平台,由 Google 发起。
- Docker Swarm Docker: 自带的编排工具,但已不再主流。
- Apache Mesos + Marathon: 早期流行,现在使用较少。
3. 类别说明
概念 | 类比 |
---|---|
容器 | 快递盒子,每个装一个服务 |
容器运行时 | 快递运输工具(如卡车、飞机) |
容器编排系统 | 快递调度系统,分配送货路线和时间 |
4.总结
项目 | 容器 | 容器编排 |
---|---|---|
目的 | 打包并运行应用 | 管理大量容器的生命周期和运行状态 |
优势 | 快速启动、轻量、可移植 | 高可用、自动化、扩展性强 |
代表技术 | Docker, containerd,podman | Kubernetes(K8s) |