【docker】docker的劈头与容器的由来、docker容器的隔离机制
Docker 的劈头与容器的由来1. 捏造机的范围:容器的需求萌芽
在 Docker 出现之前,开发和部署软件重要依赖捏造机(VMs):
[*]捏造机通过模仿硬件运行操作系统,每个应用步调可以运行在自己的独立环境中。
[*]虽然捏造机办理了隔离问题,但它们的缺点也很明显:
[*]占用资源多:每个捏造机必要运行一个完整的操作系统,占用大量内存和存储。
[*]启动慢:启动捏造机往往必要几分钟,影响开发和测试效率。
[*]部署繁琐:跨环境迁移应用时,环境差异容易引发问题。
这些问题推动了对更轻量级、快速启动、隔离性强的办理方案的需求,容器技能由此诞生。
2. 容器技能的前身
容器的概念并非 Docker 发明,而是基于 Linux 系统的已有技能演变而来:
[*]2001年:Chroot 环境
Linux 的 chroot 技能可以改变进程的根文件系统,让进程只看到特定的目录。虽然简单,但它的隔离能力有限。
[*]2008年:LXC 容器技能
Linux 开始支持 Linux Containers (LXC),基于 cgroups 和 namespace 提供了资源控制和进程隔离的能力。这是容器的雏形,但 LXC 的操作复杂,开发者使用门槛较高。
3. Docker 的诞生
[*]2013年:Docker 横空出世
一个名为 DotCloud 的创业公司开发了 Docker,目的是简化容器的使用:
[*]基于 LXC 技能:早期的 Docker 使用 LXC 容器技能。
[*]易用性:Docker 提供简单的命令行工具和友爱的 API,让开发者轻松使用容器。
[*]镜像理念:Docker 引入了轻量级、可移植的镜像,将应用步调及其运行环境封装到一个标准化的包中,方便跨环境部署。
随着 Docker 的发展,它逐步替换 LXC,构建了自己的容器引擎 libcontainer,进一步增强性能和隔离性。
Docker 容器的隔离机制
容器的核心理念是隔离:让每个容器看起来像是独立运行的“微型计算机”。Docker 使用 Linux 的内核功能实现这一点,重要依赖以下两大机制:
1. Namespace:命名空间(隔离视图)
Namespace 提供进程的视图隔离,每个容器有自己的“世界”,看不到其他容器或宿主机的资源。
[*]进程隔离(PID Namespace)
每个容器有自己的进程树,容器内部的进程只能看到自己的进程,无法干扰宿主机或其他容器的进程。
[*]文件系统隔离(Mount Namespace)
容器内有独立的文件系统,依赖 Docker 镜像加载。容器只能访问分配给它的文件系统部分。
[*]网络隔离(Net Namespace)
每个容器有自己的捏造网卡和 IP 地址,容器之间、容器与宿主机之间的网络通讯通过桥接或 NAT 控制。
[*]用户隔离(User Namespace)
容器内的用户和宿主机的用户隔离,比方容器内的 root 用户并不是真正的宿主机 root。
2. Cgroups:控制组(资源限定)
Cgroups 提供进程的资源限定,防止某个容器耗尽系统资源。
[*]CPU 限定:限定单个容器的 CPU 使用率,确保多个容器公平共享 CPU。
[*]内存限定:为容器分配固定内存,防止内存走漏影响宿主机或其他容器。
[*]I/O 限定:限定容器的磁盘读写速率,避免某些高 I/O 的容器影响整体性能。
3. UnionFS:分层文件系统
Docker 使用分层文件系统(如 AUFS、OverlayFS)管理镜像和容器的文件:
[*]镜像分层:Docker 镜像由多层组成,每层存储变化部分。
[*]写时复制:容器启动时创建一个可写层,全部对文件的修改只影响这一层,不改变原始镜像。
这种设计让镜像可以高效复用和快速构建,同时镌汰存储占用。
生动比喻
[*] 捏造机 vs 容器
[*]捏造机就像是一栋栋独立的房子,每栋房子必要自己的地基(硬件),而且盖起来很耗时。
[*]容器就像是公寓中的单元,全部单元共用同一个地基(宿主机的内核),但每个单元都有自己的门、窗、墙壁,住户互不干扰。
[*] 隔离机制的比喻
[*]Namespace 就像每个单元的“视野”:单元内的住户只能看到自己的房间,看不到其他单元的情况。
[*]Cgroups 就像物业对每个单元的资源限定:每户用电、用水有配额,超出了就会被限定。
[*]UnionFS 就像一个多层的建筑结构:底层是固定的(镜像层),住户只在顶层装修(容器层),不会破坏建筑结构。
总结
Docker 是为了办理捏造机的资源开销和环境迁移问题而生的,它通过 Linux 的 Namespace 和 Cgroups 实现隔离,通过 UnionFS 提高文件管理效率。这种轻量级的捏造化方式彻底改变了当代应用的开发、测试和部署方式,为容器化技能奠定了底子。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]