深度对比docker和kubernetes的区别和联系
如果我们想要构建和运行一个现代的云基础设施 , 那么理解Docker和Kubernetes是必不可少的 。本文主要给大家介绍Docker和Kubernetes技术以及它们之间的区别和联系 。
一、Docker1.1 容器(Container)简介
容器是打包软件的一种方式 , 包括打包应用程序的所有代码、库和依赖关系等 。它们提供了一个轻量级的虚拟环境 , 可以将一组进程和资源(如内存、CPU、磁盘等)与主机和任何其他容器隔离 。隔离保证了容器内的任何进程都不能看到容器外的任何进程或资源 。
1.2 Docker原理
linux下的容器技术使用了Linux的内核机制:namespace (ipc、uts、mount、pid、network和user) 和cgroups (在现有内核实例之上提供抽象层 , 以创建类似于虚拟机的隔离环境) 。其中 , namespace实现了对内核全局资源的隔离;而cgroup则用来限制、控制和统计一组进程及将来的子进程所使用的物理资源 , 包括cpu, memory, disk等 。
1.2.1 namespace
namespace是Linux内核的一个特性 , 它对内核资源进行分组 , 以便一组进程看到一组资源 , 同时另一组进程看到另一组资源 。也就是说内核资源被包装在namespace中 , 并且它们只对运行在同一个namespace中的进程可见 , 对其他namespace中的进程不可见 。目前namespace支持的类型包括以下六种:

文章插图
我们依次来介绍以下他们的作用:
(1)NET:
NET namespace为容器提供系统网络协议的视图(如IP地址、路由表、端口号等) 。基于此 , 不同容器都有各自独立的网络协议栈视图 , 如网络接口、IP地址、端口、路由表等 。
(2)PID(Process ID):
PID namespace为容器提供它们自己的进程视图 , 包括一个独立的init (PID 1) , 它是所有进程的祖先 。基于此 , 不同容器都有各自的PID为1的init进程 。
(3)MNT:
MNT namespace为容器提供了系统上的“文件系统挂载”视图 。因此 , 不同的容器中 , 可以看到不同的文件系统层次结构视图 , 且可以独立操作(读写)而互不影响 。
(4)UTS (UNIX Timesharing System):
UTS namespace允许容器拥有自己的主机名和NIS域名 , 它们独立于其他容器和主机系统 。
(5)IPC(Interprocess Communication):
IPC namespace负责在每个容器内运行的进程之间隔离IPC资源 。
(6)USER:
USER namespace 用于在每个容器中隔离用户 。它的功能是允许不同的容器拥有不同的UID(用户ID)和GID(组ID)范围视图 。
我们来总结一下 , 当Docker创建一个容器时 , 它会创建新的以上六种namespace的实例 , 然后把该容器中的所有进程放到这些namespace之中 , 使得容器这个父进程只对自己创建的子进程有感知 , 而对于宿主机的和其他容器创建的进程一无所知 , 从而产生一种它就是一个独立的系统的“错觉” 。
1.2.2 cgroups
control groups这是一个Linux内核特性 , 用于隔离和管理不同的资源 , 如CPU、内存、磁盘I/O、网络等的消耗 。cgroups还可以确保单个容器不会耗尽其中某一个资源 , 从而避免整个系统的崩溃 。
1.3 Docker的组成

文章插图
一个完整的Docker系统由以下6个部分组成 , 分别是:
Docker Client:
这是CLI(命令行接口)工具 , 用于配置Docker并与之交互 。每当开发人员或用户运行docker命令(内部封装了Docker Client)时 , Docker Client就会将这些命令发送到docker守护进程(dockerd) , dockerd会负责执行这些具体的命令 。
Docker Daemon:
这是作为docker守护进程运行的Docker服务器 。这个守护进程侦听API请求并管理Docker对象(images、containers、networks和volumes) 。守护进程还可以与其他守护进程通信来管理Docker服务 。
Images(镜像):
Images是用于创建Docker容器的只读模板或者快照 。这些Images可以从镜像仓库获取 。镜像仓库分为公有镜像仓库和私有镜像仓库 。Docker Hub 是市面上主流的公有镜像仓库 。除了公有镜像仓库以外 , 很多企业为了节省网络带宽和提高镜像资源使用率 , 也会配置自己的私有镜像仓库 , 提供给企业内部员工使用 。
Docker file:
Docker file用来创建Docker Image 。具体Docker file的语法大家可以参考相关的文档 。
推荐阅读
- 苹果12和12pro参数对比表,苹果12和12pro参数对比尺寸?
- 华为mate40pro+对比荣耀magic3至臻版,华为mate40pro和荣耀Magic3?
- 麻黑茶功效与作用,倚邦与麻黑熟茶的对比
- IT工程师都需要掌握的容器技术之Docker基本用法
- 发型|?“化妆、发型”对女人来说有多重要?看完这些对比照后,我悟了
- 柏翠面包机各款对比 柏翠面包机性价比最高的是哪一款
- 谏逐客书对比论证举例分析,分析《谏逐客书》的论证结构?
- iPhone|对比苹果13!iPhone 14 Pro新外形曝光:边角设计更圆 打孔屏扎眼
- 项目推荐:利器—一个开源工具探究Docker 镜像的世界
- 使用Docker来构建、运行、发布微服务