首页 > 其他分享 >Docker学习路线2:底层技术

Docker学习路线2:底层技术

时间:2023-07-11 19:57:59浏览次数:51  
标签:容器 cgroups 隔离 路线 命名 进程 Docker 底层

了解驱动Docker的核心技术将让您更深入地了解Docker的工作原理,并有助于您更有效地使用该平台。

Linux容器(LXC)

Linux容器(LXC)是Docker的基础。 LXC是一种轻量级的虚拟化解决方案,允许多个隔离的Linux系统在单个主机上运行,无需全功能的虚拟化。 LXC有效地以安全和优化的方式隔离应用程序及其依赖项。

控制组(cgroups)

控制组(cgroups)是Linux内核的一个功能,允许分配和管理资源,例如CPU、内存和I/O,到一组进程。 Docker利用cgroups来限制容器使用的资源,并确保一个容器不会垄断主机系统的资源。

联合文件系统(UnionFS)

UnionFS是一个文件系统服务,允许在单个、统一的视图中叠加多个文件系统。 Docker使用UnionFS为镜像和容器创建分层方法,这使得共享公共文件和更快的容器创建成为可能。

命名空间

命名空间是另一个Linux内核特性,提供进程隔离。它们允许Docker创建名为容器的隔离工作区。命名空间确保容器内的进程不能干扰容器外或主机系统上的进程。有几种类型的命名空间,如PID、NET、MNT和USER,每个命名空间负责隔离进程的不同方面。

命名空间

命名空间是 Docker 用于提供容器之间隔离的核心技术之一。在本节中,我们将简要讨论命名空间是什么以及它们如何工作。

命名空间是什么?

在 Linux 内核中,命名空间是一种功能,允许隔离各种系统资源,使得进程及其子进程能够看到与其他进程分离的系统子集。命名空间有助于创建抽象层,将容器化的进程与彼此和主机系统分开。

Linux 中有几种类型的命名空间,包括:

  • PID (进程 ID):隔离进程 ID 号码空间,这意味着容器内的进程只看到它们自己的进程,而不是主机或其他容器中的进程。
  • Network (NET):为每个容器提供网络堆栈的单独视图,包括其自己的网络接口、路由表和防火墙规则。
  • Mount (MNT):以这样的方式隔离文件系统挂载点,以便每个容器都有自己的根文件系统,并且挂载的资源仅出现在该容器内。
  • UTS (UNIX Time Sharing System):允许每个容器拥有自己的主机名和域名,与其他容器和主机系统分开。
  • User (USER):在容器和主机之间映射用户和组标识符,因此可以为容器内的资源设置不同的权限。
  • IPC (进程间通信):允许或限制不同容器中的进程之间的通信。

Docker 如何使用命名空间

Docker 使用命名空间为容器创建隔离的环境。当容器启动时,Docker 会为该容器创建一组新的命名空间。这些命名空间仅适用于容器内部,因此在容器内运行的任何进程都可以访问一组与其他容器以及主机系统隔离的系统资源的子集。

通过利用命名空间,Docker 确保容器真正具有可移植性,可以在任何系统上运行,而不会与运行在同一主机上的其他进程或容器发生冲突或干扰。

总之,命名空间提供了一种资源隔离的级别,使得在同一主机上运行具有独立系统资源的多个容器成为可能,而它们之间不会相互干扰。这是 Docker 容器技术的支柱性特征。

cgroups

cgroupscontrol groups是Linux内核的一个功能,它允许您在运行系统上的进程组之间分配和管理资源,例如CPU、内存、网络带宽和I/O。它在提供资源隔离和限制运行容器可以使用的资源方面发挥着至关重要的作用。

Docker利用cgroups对容器进行资源约束,从而使它们具有一致和可预测的行为。以下是cgroups在Docker容器上下文中的一些关键功能和优点:

资源隔离

cgroups有助于将每个容器限制在特定的资源集上,确保多个容器之间公平共享系统资源。这可以在不同的容器之间实现更好的隔离,以便不良行为的容器不会消耗所有可用资源,从而对其他容器产生负面影响。

限制资源

使用cgroups,您可以设置容器使用的各种系统资源的限制,例如CPU、内存和I/O。这有助于防止单个容器消耗过多的资源,从而对其他容器或主机系统造成性能问题。

优先处理容器

通过分配不同的资源份额,cgroups允许您优先或优先处理某些容器。这在某些容器比其他容器更为关键或在高资源争用情况下非常有用。

监控

cgroups还提供监视单个容器资源使用的机制,这有助于了解容器性能并识别潜在的资源瓶颈。

总的来说,cgroups是Docker的一个重要的基础技术。通过利用cgroups,Docker提供了一个健壮和高效的容器运行时环境,确保容器具有所需的资源,同时保持良好的整体系统性能。

Docker引擎

“Docker Desktop”和“Docker引擎”之间经常存在混淆。 Docker引擎专指Docker桌面组件的一个子集,它是免费且开源的,只能在Linux上安装。

Docker引擎包括:

  • Docker命令行界面(CLI)
  • Docker守护进程(dockerd),公开Docker应用程序编程接口(API)

Docker引擎可以构建容器镜像,从容器镜像运行容器,并且通常可以执行Docker桌面的大多数操作,但它仅适用于Linux,并且不提供Docker桌面提供的所有开发人员体验。

最后

为了方便其他设备和平台的小伙伴观看往期文章,链接奉上:

公众号 Let us Coding牛客知乎开源中国CSDN思否掘金InfoQ简书博客园慕课51CTOhelloworld腾讯开发者社区阿里开发者社区

看完如果觉得有帮助,欢迎点赞、收藏关注

标签:容器,cgroups,隔离,路线,命名,进程,Docker,底层
From: https://www.cnblogs.com/xiaowange/p/17545757.html

相关文章

  • Docker网络模式和案例分享
    Docker提供了多种网络模式和功能,以便在容器间建立网络通信和连接外部网络1.默认网络模式(bridge):Docker默认使用bridge网络模式,创建一个名为docker0的虚拟网桥,并为每个容器分配一个IP地址。容器间可以通过IP地址相互通信2.主机模式(host):使用主机模式时,容器直接使用宿主机......
  • day-3 路由底层源码
    1.定义路由本质比如在url.py定义以下路由,浏览器中输入http://192.168.0.1:8000/user/2003-04-21可以访问意味着此urlhttp://192.168.0.1:8000/user/2003-04-21和url.py里的路由们做了路由匹配如果匹配成功找到相应的试图函数  源码解析ctrl+鼠标左键点进re_path,会发......
  • centos7 用docker搭建Mysql主从
    安装Docker和DockerCompose:安装预置:sudoyumupdateyuminstallpython3-pipsudoyumgroupinstall"DevelopmentTools"sudoyuminstallepel-releasesudoyuminstallopenssl-devellibffi-develpython3-devel安装docker:yumremovedockerdocker-clientdocker-......
  • 77.C++中的指针参数传递和引用参数传递有什么区别?底层原理你知道吗?
    77.C++中的指针参数传递和引用参数传递有什么区别?底层原理你知道吗?1.指针参数传递本质上是值传递,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,会在栈中开辟内存空间以存放由主调函数传递进来的实参值,从而形成了实参的一个副本(替身)。值传......
  • docker pull拉 x509: certificate has expired or is not yet valid:
    [[email protected]]#dockerpullXXXcode-analysis:centos7.3-1.0Errorresponsefromdaemon:Get"XXXX":x509:certificatehasexpiredorisnotyetvalid:currenttime2023-07-11T14:27:37+08:00isafter2018-08-22T11:54:50Z x509:c......
  • docker部署mssql
    docker部署SQLServer2022参考微软官方文档Docker:为Linux上的SQLServer安装容器-SQLServer|MicrosoftLearn(安装的是开发人员版)1.请求映像dockerpullmcr.microsoft.com/mssql/server:2022-latest注意:server:xx,xx表示对应的版本(https://hub.docker.com/r/mi......
  • mysql - docker主从复制
    1、docker拉取镜像dockerpullmysql:8.0 2、查看dockerimages 3、创建容器主:dockerrun-p3309:3306--namemaster-eMYSQL_ROOT_PASSWORD=123456--restart=always-dmysql:8.0 从:dockerrun-p3310:3306--namesalve-eMYSQL_ROOT_PASSWORD=123456--res......
  • (转)Docker格式化输出命令:"docker inspect --format" 学习笔记
    原文:https://www.cnblogs.com/kevingrace/p/6424476.htmlDocker--format参数提供了基于Go模板的日志格式化输出辅助功能,并提供了一些内置的增强函数。什么是模板?上图是大家熟悉的 MVC框架(ModelViewController): Model(模型,通常在服务端)用于处理数据、View(视图,客户端代码......
  • Kubernets与Docker的故事
    在2016年底的1.5版里,Kubernetes引入了一个新的接口标准:CRI,ContainerRuntimeInterface。CRI采用了ProtoBuffer和gPRC,规定kubelet该如何调用容器运行时去管理容器和镜像,但这是一套全新的接口,和之前的Docker调用完全不兼容。 Kubernetes也只能同时提供一个“折中”......
  • Docker教程
    目录Docker教程1.Docker是什么2.Docker的用途3.Docker的安装4.运行Docker4.1DockerHelloWorld4.2运行交互式的容器4.3后台模式启动容器4.4停止容器5.Docker容器使用5.1Docker客户端5.2容器使用5.2.1获取镜像5.2.2启动镜像5.2.3启动已经停止的容器5.2.4后台运行5.......