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探究
94 2
|
Ubuntu 关系型数据库 MySQL
【Docker 系列】docker 学习六,探究一下数据卷容器
【Docker 系列】docker 学习六,探究一下数据卷容器
124 0
|
网络协议 关系型数据库 MySQL
Docker | docker网络及原理探究
Docker | docker网络及原理探究
242 0
Docker | docker网络及原理探究
|
存储 Kubernetes Docker
《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》——1.3 探究容器
由于围绕Docker和容器的开发节奏很快,现在任何书籍所能做的最好的就是将你带到一条正确的路上。本书中,这就意味着一开始会给出一套靠谱示例来说明当前Docker和精选的一组支持工具是如何工作的。之后,这条大路就会展示位于地平线上的新特性和新工具。
2075 0
|
6天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
28 2
|
4天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
12天前
|
关系型数据库 MySQL API
|
8天前
|
运维 持续交付 Docker
深入理解Docker容器化技术
深入理解Docker容器化技术
|
5天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
6天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?