1、什么是容器化
容器就是一个视图隔离、资源可限制、独立文件系统的进程集合。
容器化是指将软件代码和所需的所有组件(例如库、框架和其他依赖项)打包在一起,让它们隔离在自己的"容器"中。
这样,容器内的软件或应用就可以在任何环境和任何基础架构上一致地移动和运行,不受该环境或基础架构的操作系统影响。容器就像是一个气泡(或者是应用周围的计算环境),把应用和周围环境隔离开来。它相当于是一个功能全面、便于移植的计算环境。
容器是取代在平台或操作系统上直接编写代码的一种替代方案,因为在这种旧的方式中,代码可能无法与新环境兼容,使得应用难以移动。如此就可能会产生漏洞、错误和故障,从而需要消耗更多时间进行修复,导致生产力降低和团队产生强烈的挫败感。
将应用打包装入可在平台和基础架构之间移动的容器后,只用把该容器移动到某个位置,应用就能在那里成功运行使用,因为容器中包含了成功运行应用所需的一切。
进程隔离的想法早已存在多年,但直到 2013 年 Docker 推出 Docker 引擎,业界才设立了使用容器的标准,配以方便开发人员使用的工具及通用的打包方法,此举加速了容器技术的采用。如今,开发人员可从一系列容器化平台和工具自由挑选,如 Podman、Buildah 和 Skopeo 等,它们全都支持 Docker 发起的开放式容器倡议标准
2、虚拟机 VS 容器
从图上我们可以看出 :
- 虚拟机:每个虚拟机运行在其自己的操作系统上,包括一个完整的内核和用户空间。虚拟机管理程序(Hypervisor)在物理硬件上运行,并为每个虚拟机提供虚拟化的硬件资源。
- 容器:容器共享宿主机的操作系统内核,每个容器只包含应用程序及其所需的库和依赖。Docker 引擎负责管理和运行这些容器。
2.1、名词解释
Bins 和 Libs 是指二进制文件和库文件,它们在应用程序的运行中起着关键作用。
Guest OS(客体操作系统) 是运行在虚拟机上的操作系统。它与物理机上的操作系统(通常称为 Host OS,即宿主操作系统)相对。
Docker Engine 是 Docker 平台的核心组件,负责创建和管理容器。
Hypervisor(虚拟机监控器)是一种用于创建和管理虚拟机的技术。它允许多台虚拟机在单个物理硬件上运行,每个虚拟机都可以运行自己的操作系统。如:VMware VirtualBox等
Host OS(宿主操作系统)是指运行容器管理工具(如 Docker)的底层操作系统。它是容器运行的基础环境,负责提供必要的资源和内核功能支持
Server(服务器)通常指的是提供计算资源、存储和网络服务的物理或虚拟机器
参考: 慕课网 docker视频
2.2、容器不就是虚拟化吗?
实际上不完全如此。更确切的说法应该是:两者为互补关系。我们用一种简单方式来思考一下两者之间的关系:
- 虚拟化使得您的操作系统(Windows 或 Linux)可同时在单个硬件系统上运行。
- 容器则可共享同一个操作系统内核,将应用进程与系统其他部分隔离开。例如:ARM Linux 系统运行 ARM Linux 容器,x86 Linux 系统运行 x86 Linux 容器,x86 Windows 系统运行 x86 Windows 容器。Linux 容器具有极佳的可移植性,但前提是它们必须与底层系统兼容。他们共享了 HostOS
参考: 什么是 Linux 容器
容器实现的底层技术是什么?
-
chroot:
chroot是一种改变进程根目录的技术,提供了一种简单的文件系统隔离机制。尽管它可以用于隔离应用程序的文件系统视图,但它并不提供完整的隔离(如进程、网络等)。- 在容器技术中,
chroot本身并不是直接使用的关键技术,但它的概念在某种程度上启发了更复杂的隔离技术(如命名空间)。
-
Namespace:
-
Namespace是 Linux 内核提供的一种机制,用于隔离进程的不同操作系统资源视图。Docker 和其他容器技术广泛使用命名空间来实现容器之间的隔离。 -
常见的命名空间包括:
- PID Namespace:隔离进程ID,使每个容器有自己的进程树。
- Network Namespace:隔离网络资源,使每个容器可以拥有自己的网络栈。
- Mount Namespace:隔离文件系统挂载点,使每个容器可以有自己的文件系统视图。
- UTS Namespace:隔离主机名和域名。
- IPC Namespace:隔离进程间通信资源。
- User Namespace:隔离用户和组ID。
-
-
Cgroup:
Cgroup(控制组)是 Linux 内核提供的另一种机制,用于限制、计量和隔离进程的资源使用(如 CPU、内存、磁盘I/O 等)。- 在容器中,
cgroup被用来确保每个容器只能使用分配给它的资源,防止一个容器占用过多的系统资源,影响其他容器和宿主机的性能。
docker和容器之间关系
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。