杂记:
- 容器技术的兴起源于 PaaS 技术的普及
- Docker 公司发布的 Docker 项目具有里程碑式的意义
- Docker 项目通过“容器镜像”,解决了应用打包这个根本性难题
- 容器本身没有价值,有价值的是“容器编排”
进程:
静态表现:程序
动态表现:计算机里的数据和状态总和
容器:
核心功能:通过约束和修改进程的动态表现,从而为其创造出一个“边界”
本质:一种特殊的进程
虚拟机与容器的对比
虚拟机:
- 是物理硬件的抽象,将一台服务器转变为多台服务器。虚拟机管理程序允许多台虚拟机在一台计算机上运行。每个VM都包含操作系统的完整副本,应用程序,必要的二进制文件和库 - 占用数十GB。虚拟机也可能很慢启动。
- ps:Hypervisor 的软件是虚拟机最主要的部分。它通过硬件虚拟化功能,模拟出了运行一个操作系统需要的各种硬件,比如 CPU、内存、I/O 设备等等。然后,它在这些虚拟的硬件上安装了一个新的操作系统,即 Guest OS。
- 优点:
- 1.硬安全边界:虚拟机在相邻系统之间提供了硬件级别的隔离,应用使用的是独立的操作系统。而在容器中,应用共享宿主机内核,在一个操作系统中运行,操作不当可能会影响整个系统。
- 2.可在模拟多种操作系统
- 3.享用更多主机资源:分配给虚拟机的资源远远超过分配给容器的资源。这就是为什么虚拟机更适合资源密集型任务。较大规模和较长生命周期的任务更适合与 VM 一起使用。
- 缺点:重量、启动时间长、代价高
- 1.不便携,重量:虚拟机是千兆字节大小的软件块,容器镜像的大小通常为几十兆
- 2.过多的无效资源:将资源分配给虚拟机,会直接占用掉本机资源,未使用的资源会被浪费;每个VM储存自己独立的操作系统文件,它还包含库、二进制文件和操作系统所需的虚拟硬件的副本。重复文件会占用服务器的大部分 RAM 和 CPU 资源。
- 更难维护的操作系统:主机上可运行多个虚拟机,各个虚拟机各自可使用不同的操作系统,需要各自更新,各自维护。
Docker容器:
- 是应用层的抽象,它将代码和依赖关系打包在一起。多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为独立进程运行。容器占用的空间比VM少(容器映像的大小通常为几十MB),可以处理更多的应用程序,并且需要更少的VM和操作系统。
- 优点:轻量化、启动时间短
- 1.便携性:容器是高度可移植的,可本机、私有云、公有云等跨环境移动
- 2.有效的资源使用:打包在容器中的代码共享运行容器所需的大部分依赖项,包括操作系统、库和框架。与虚拟机不同,每个硬件中只有一个必要文件的副本,从而更有效地使用资源。这也导致容器更轻,这意味着您可以在物理服务器中容纳更多容器。
- 3.高度可扩展性:容器编排器,如 Kubernetes 或 Docker Swarm,可自动执行大部分容器管理流程,包括扩展、网络和部署。容器化应用程序具有高度可扩展性,它们可以在需要时通过启动新节点和/或 Pod 来快速扩展和缩减。
- 缺点:
- 1.缺乏安全措施:容器提供与同一系统内的主机操作系统和容器的轻量级隔离。与虚拟机相比,这会导致较弱的安全边界。
- 2.只运行一个操作系统:容器与主机共享内核,这意味着,如果要在 Windows 宿主机上运行 Linux 容器,或者在低版本的 Linux 宿主机上运行高版本的 Linux 容器,都是行不通的。