Skip to content

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,podmanKubernetes(K8s)