Docker 底层探究

简介: Docker用Go编程语言编写,并利用Linux内核的多个功能来实现其功能。

Namespaces(命名空间)


Docker uses a technology called namespaces to provide the isolated workspace called the container. When you run a container, Docker creates a set of namespaces for that container.


Docker使用命名空间的技术实现容器(虚拟)独立的工作区


理解Namespaces


Namespaces,可以理解为虚拟化隔离


当我们在系统上运行程序时,系统会为我们分配pid,net,ipc,mnt,uts等资源,当我们在Linux中运行时这些都是全局的。


当我们使用命名空间即可实现隔离的机制,每个分配pid,net,ipc,mnt,uts都是独立的,这样我们就可以实现权限管理等


These namespaces provide a layer of isolation. Each aspect of a container runs in a separate namespace and its access is limited to that namespace.


Docker Engine uses namespaces such as the following on Linux:


  • The `pid` namespace: Process isolation (PID: Process ID).


  • The `net` namespace: Managing network interfaces (NET: Networking).


  • The `ipc` namespace: Managing access to IPC resources (IPC: InterProcess Communication).


  • The `mnt` namespace: Managing filesystem mount points (MNT: Mount).


  • The `uts` namespace: Isolating kernel and version identifiers. (UTS: Unix Timesharing System).


进程ID(pid)


进程的PID命名空间提供与一组独立的从其他命名空间进程ID(PID)的处理。PID名称空间是嵌套的,这意味着在创建新进程时,它将为每个名称空间从当前名称空间到初始PID名称空间都有一个PID。因此,初始PID名称空间能够查看所有进程,尽管与其他名称空间看到的PID不同。


在PID名称空间中创建的第一个进程被分配了编号为1的进程,并获得与常规进程相同的大多数特殊处理,最值得注意的是,名称空间内的孤立进程。这也意味着此PID 1进程的终止将立即终止其PID名称空间中的所有进程以及所有后代。


网络(网络)


网络名称空间可虚拟化网络堆栈。创建时,网络名称空间仅包含回送接口。


每个网络接口(物理或虚拟)都存在于1个名称空间中,并且可以在名称空间之间移动。


每个名称空间都有一组专用的P地址,自己的路由表套接字列表,连接跟踪表,防火墙和其他与网络相关的资源。


销毁网络名称空间会破坏其中的任何虚拟接口,并将其中的任何物理接口移回到初始网络名称空间。


进程间通信(ipc)


IPC名称空间将进程与SysV样式的进程间通信隔离开。这样可以防止不同IPC名称空间中的进程使用例如SHM系列功能在两个进程之间建立一定范围的共享内存。相反,每个进程将能够对共享内存区域使用相同的标识符,并产生两个这样的不同区域。


挂载(mnt)


安装名称空间控制安装点。创建后,会将当前安装名称空间中的安装复制到新的名称空间,但是之后创建的安装点不会在名称空间之间传播(使用共享子树,可以在名称空间之间传播安装点。


用于创建这种类型的新名称空间的克隆标志是CLONE_NEWNS-“ NEW NameSpace”的缩写。该术语不是描述性的(因为它没有告诉您要创建哪种类型的名称空间),因为挂载名称空间是第一类名称空间,设计人员并不预期会有其他名称空间。


UTS (UNIX Time-Sharing)


命名空间允许单个系统对不同的进程使用不同的主机名和域名。


Control groups


Docker Engine on Linux also relies on another technology called control groups (cgroups). A cgroup limits an application to a specific set of resources. Control groups allow Docker Engine to share available hardware resources to containers and optionally enforce limits and constraints. For example, you can limit the memory available to a specific container.


Linux上的Docker引擎还依赖另一种称为控制组cgroups)的技术。cgroup将应用程序限制为一组特定的资源。控制组允许Docker引擎将可用的硬件资源共享给容器,并可以选择性地实施限制和约束。例如,可以限制特定容器的可用内存。


Union file systems


Union file systems, or UnionFS, are file systems that operate by creating layers, making them very lightweight and fast. Docker Engine uses UnionFS to provide the building blocks for containers. Docker Engine can use multiple UnionFS variants, including AUFS, btrfs, vfs, and DeviceMapper.


Union文件系统(UnionFS)是通过创建层来操作的文件系统,使它们非常轻量级和快速。Docker引擎使用UnionFS为容器提供构建块。Docker引擎可以使用多种UnionFS变体,包括AUFS、btrfs、vfs和DeviceMapper。


Container format


Docker Engine combines the namespaces, control groups, and UnionFS into a wrapper called a container format. The default container format is libcontainer. In the future, Docker may support other container formats by integrating with technologies such as BSD Jails or Solaris Zones.


Docker引擎将名称空间、控制组和UnionFS组合成一个称为容器格式的包装器。默认容器格式为“libcontainer”。将来,Docker可以通过集成BSD监狱或Solaris区域等技术来支持其他容器格式。


总结


docker使用go语言编写,基于Namespaces进行虚拟化隔离,Control groups进行对资源的限制,联合文件Union file systems来快速构建(可复用的镜像层),

目录
相关文章
|
Shell Linux 开发工具
Docker Dockerfile探究
Docker Dockerfile探究
100 2
|
Ubuntu 关系型数据库 MySQL
【Docker 系列】docker 学习六,探究一下数据卷容器
【Docker 系列】docker 学习六,探究一下数据卷容器
133 0
|
网络协议 关系型数据库 MySQL
Docker | docker网络及原理探究
Docker | docker网络及原理探究
256 0
Docker | docker网络及原理探究
|
存储 Kubernetes Docker
《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》——1.3 探究容器
由于围绕Docker和容器的开发节奏很快,现在任何书籍所能做的最好的就是将你带到一条正确的路上。本书中,这就意味着一开始会给出一套靠谱示例来说明当前Docker和精选的一组支持工具是如何工作的。之后,这条大路就会展示位于地平线上的新特性和新工具。
2082 0
|
24天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
180 77
|
5天前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
74 35
|
1月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
4天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
10天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
37 4
|
25天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
80 3

热门文章

最新文章