一、容器运行的要素
1、容器引擎:容器引擎是容器技术的核心组件,负责创建、管理和执行容器。常见的容器引擎包括 Docker 和 Kubernetes 等。
2、容器隔离和资源管理:这是通过 namespaces 、chroot和 cgroup 等技术实现的。Namespacing 提供了进程隔离和独立操作相同系统资源的能力,而 cgroup 则用于限制和管理容器中进程的行为,为容器提供资源管理和控制的功能。
- 资源管理:CGroup(Control Group)是Linux内核提供的一种机制,用于对进程和任务进行分组和管理。CGroup可以帮助限制、衡量和分配系统资源,如CPU、内存、磁盘IO、网络带宽等,以便更好地控制和管理系统性能。
- 容器隔离: Namespaces(命名空间)是Linux内核提供的一种机制,用于隔离和限定进程的资源视图。通过使用命名空间,可以在同一个系统上创建独立、互相隔离的环境,使进程在各个命名空间中运行时只能看到和访问自己所属的资源。包括如下:
PID 命名空间:每个进程在该命名空间中有自己独立的进程 Mount 命名空间:每个命名空间都有自己的挂载点表,使得在不同命名空间中挂载的文件系统不会相互干扰。 Network 命名空间:每个命名空间都有自己的网络设备、IP地址和端口空间,从而实现网络隔离,不同命名空间中的进程无法直接通信。 UTS 命名空间:每个命名空间都有自己的主机名和域名,使得不同命名空间中的进程拥有独立的主机名和域名。 IPC 命名空间:每个命名空间都有自己的进程间通信(IPC)资源,如共享内存、消息队列和信号量,使得不同命名空间中的进程无法直接访问其他命名空间的 IPC 资源。 User命名空间:User命名空间用于隔离用户和用户组标识符(UID和GID)
- 容器隔离:chroot将特定目录作为系统的根目录,从而隔离这个进程及其子进程对其他目录的访问。chroot命令通过修改根目录,限制了进程对文件系统的可见性,增加了安全性。
3、容器镜像:容器镜像是容器的可重用软件包,包含了应用程序及其依赖项和配置信息。容器镜像是容器引擎和容器隔离的重要组成部分,它们共同构成了容器的运行时环境。