云原生技术栈解析:宿主机、容器、Docker、Kubernetes 之间的区别于联系

云原生技术栈解析:宿主机、容器、Docker、Kubernetes 之间的区别于联系

我们可以用一个生动的比喻来开始,这有助于理解它们之间的关系:

运输行业的比喻:

  • 宿主机 :就像是一台物理的货运卡车,它拥有自己的发动机、底盘和货箱。
  • 容器 :就像是卡车上的一个个标准尺寸的集装箱。每个集装箱内部都打包了不同的货物(应用及其依赖),并且相互隔离。
  • Docker :就像是制造和打包集装箱的标准化工厂。它负责将货物(应用)高效、标准地装进集装箱(容器镜像),并能在卡车上启动集装箱(运行容器)。
  • Kubernetes :就像是整个物流调度系统。它管理着一个庞大的车队(宿主机集群),决定哪个集装箱(容器)应该放在哪辆卡车(宿主机)上,如何规划路线(网络),如何扩容缩容(调度),以及确保某个卡车坏了之后,上面的集装箱能自动转移到其他卡车上(自愈)。

1. 宿主机

  • 定义:指物理服务器或者虚拟机(VM),是承载操作系统和应用程序的实体计算机。它提供了CPU、内存、硬盘、网络等基础计算资源。
  • 角色 :是所有上层技术(虚拟机、容器)运行的物理基础
  • 在容器技术中的角色:宿主机是安装并运行容器引擎(如 Docker)的服务器。容器直接运行在宿主机的内核之上。

2. 容器

  • 定义 :容器是一种轻量级、可移植的软件打包技术,它将应用程序及其所有依赖项(库、框架、运行时环境等)打包在一起。
  • 核心特性
    • 隔离性:通过 Linux 内核的 Namespace 和 Cgroups 等技术,为进程提供独立的运行环境,包括文件系统、网络、进程树等,使其看起来像是一个独立的操作系统。
    • 轻量级:与虚拟机不同,容器不需要模拟整个操作系统,而是与宿主机共享内核,因此启动极快、资源开销极小。
    • 可移植性:保证了"一次构建,处处运行",因为在任何支持容器的环境中,应用的运行环境都是一致的。
  • 角色 :是应用的标准化交付物和运行实例

3. Docker

  • 定义 :Docker 是最流行的容器化平台,它提供了一整套工具来创建、分发和运行容器。
  • 核心组件
    • Docker Daemon(docker 守护进程):守护进程,负责构建、运行和管理容器。
    • Docker Client:命令行工具,用户通过它与 Daemon 交互。
    • Docker Image(docker镜像)容器的模板,是一个只读的文件层。我们通过镜像来创建容器。
    • Dockerfile:一个文本文件,包含了构建一个镜像所需的所有指令(如基础镜像、复制文件、安装依赖、启动命令等)。
  • 角色 :是容器的引擎和生态系统。它让容器的使用变得简单和标准化。可以说,Docker 普及了容器技术。

4. Kubernetes

  • 定义 :Kubernetes(常简称为 K8s)是一个开源的容器编排系统,用于自动化容器化应用的部署、扩展和管理。
  • 核心功能
    • 服务发现与负载均衡:自动将流量分发到多个容器实例。
    • 存储编排:自动挂载存储系统(如本地存储、云存储)。
    • 自动部署和回滚:可以控制应用的部署速度和版本,出现问题能一键回滚。
    • 自动扩缩容:根据 CPU 使用率或自定义指标,自动增加或减少容器实例的数量。
    • 自我修复:当容器失败时,它会自动重启容器;当节点(宿主机)宕机时,它会重新调度该节点上的容器到其他健康节点上运行。
  • 角色 :是管理大规模容器集群的大脑。当你的应用从几个容器扩展到成百上千个容器时,手动管理是不可能的,Kubernetes 就变得至关重要。

区别与联系总结

特性 宿主机 容器 Docker Kubernetes
本质 物理/虚拟硬件资源 隔离的进程 容器化平台/引擎 容器编排系统
层级 最底层,基础设施 运行在宿主机上 运行在宿主机上,用于管理容器 运行在宿主机集群之上,管理 Docker 和容器
核心关注点 提供计算资源 应用打包与隔离 构建、分发、运行单个容器 集群管理、调度、高可用、弹性伸缩
管理规模 单台机器 单个或少量应用 单台机器上的多个容器 成百上千台机器和容器
关系 为 Docker 提供运行环境 是 Docker 管理的对象 依赖于宿主机创建和运行容器 不直接依赖 Docker (可以使用其他容器运行时,如 containerd),但管理和调度由 Docker 创建的容器
联系(工作流程):
  1. 开发人员 使用 Docker 定义 Dockerfile,并构建出容器镜像
  2. 这个镜像被推送到镜像仓库(如 Docker Hub)。
  3. 运维/DevOps 工程师 在由多台宿主机 组成的集群上部署 Kubernetes
  4. 他们通过一个 YAML 配置文件告诉 Kubernetes:"请运行我这个应用的 5 个实例,并暴露一个服务"。
  5. Kubernetes 的调度器(Scheduler)会从镜像仓库拉取镜像,并根据各台宿主机的资源情况,选择最合适的节点。
  6. 在这些选定的宿主机 上,Kubernetes 通过其节点上的容器运行时 (过去通常是 Docker,现在更常见的是 containerd 或 CRI-O)来创建并启动容器
  7. Kubernetes 持续监控所有这些容器的状态,确保始终有 5 个健康的实例在运行。

结论

  • 宿主机是地基。
  • 容器是在地基上建的标准化房间(里面住着应用)。
  • Docker 是建造和启动这些房间的工具和标准。
  • Kubernetes 是管理一个由无数地基和房间组成的摩天大楼的智能物业系统。

它们四者环环相扣,共同构成了现代云原生应用的技术基石。

相关推荐
sg_knight1 小时前
Docker 实战:如何限制容器的内存使用大小
java·spring boot·spring·spring cloud·docker·容器·eureka
电棍2331 小时前
在docker a100云服务器运行vulkan->sapien->robotwin的经验(报错segmentation fault)
运维·docker·容器
MichaelCoCoQ6 小时前
Zabbix监控K8S的PV卷
容器·kubernetes·负载均衡·zabbix·运维开发
微学AI6 小时前
深入评测openEuler 24.03 LTS SP2:在云原生时代构筑高性能的应用与实战操作
云原生·openeuler
似水流年 光阴已逝6 小时前
k8s中的StatefulSet 控制器
云原生·容器·kubernetes
chen_note6 小时前
K8s的标签应用和调度
云原生·容器·kubernetes·标签·污点与容忍度
墨倾许7 小时前
《Windows 11 + Docker:极简DVWA靶场搭建全记录》—— 附详细排错指南与最终解决方案
windows·笔记·网络安全·docker·容器·靶场
岚天start7 小时前
解决方案—K8S集群的日志按天并按照命名空间分类定时同步到日志服务器
服务器·docker·kubernetes·shell·日志备份
微学AI7 小时前
内网穿透的应用-摆脱局域网!Stable Diffusion3.5 结合cpolar使用更方便
docker·stable diffusion·内网穿透
梁萌8 小时前
linux中使用docker安装MySQL
linux·运维·docker·容器·mysql安装