• 技术文章 >运维 >Docker

    docker核心技术是哪两个

    青灯夜游青灯夜游2022-05-11 12:57:12原创155

    两个核心技术:1、“Linux namespaces”,是对全局系统资源的一种封装隔离,使得处于不同namespace的进程拥有独立的全局系统资源;2、“Control Groups”,能够隔离宿主机器上的物理资源,实现对资源的配额和度量。

    本教程操作环境:linux5.9.8系统、docker-1.13.1版、Dell G3电脑。

    Docker是基于Go语言实现的云开源项目。

    Docker通过虚拟化技术,解决了开发环境、测试环境、生产环境的一致的问题,让App及其运行环境达到“Build,Ship and Run Any APP,Anywhere”的目的。方便做持续集成,并有助于整体发布和扩缩容的容器虚拟化技术。

    docker的两个核心技术:Namespaces , Controller Groups。

    一、隔离性:Linux Namespace (ns)

    Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前 namespace 里的进程,对其他 namespace 中的进程没有影响。这些资源包括:进程树、网络接口、挂载点以及进程间通信等资源。的在同一个 namespace 下的进程可以感知彼此的变化,而对外界的进程一无所知。这样就可以让容器中的进程产生错觉,认为自己置身于一个独立的系统中,从而达到隔离的目的。

    每个用户实例之间相互隔离, 互不影响。 一般的硬件虚拟化方法给出的方法是 VM,而 LXC 给出的方法是 container,更细一点讲就是 kernel namespace。其中pid、net、ipc、mnt、uts、user等 namespace 将 container 的进程、网络、消息、文件系统、UTS("UNIX Time-sharing System") 和用户空间隔离开。

    1)、pid namespace

    不同用户的进程就是通过 pid namespace 隔离开的,且不同 namespace 中可以有相同 pid。所有的 LXC 进程在 docker 中的父进程为 docker 进程,每个 lxc 进程具有不同的 namespace。同时由于允许嵌套,因此可以很方便的实现 Docker in Docker。

    2)、net namespace

    有了 pid namespace, 每个 namespace 中的 pid 能够相互隔离,但是网络端口还是共享 host 的端口。网络隔离是通过 net namespace 实现的, 每个 net namespace 有独立的 network devices, IP addresses, IP routing tables, /proc/net 目录。这样每个 container 的网络就能隔离开来。docker 默认采用 veth 的方式将 container 中的虚拟网卡同 host 上的一个 docker bridge: docker0 连接在一起。

    3)、ipc namespace

    container 中进程交互还是采用 linux 常见的进程间交互方法 (interprocess communication - IPC), 包括常见的信号量、消息队列和共享内存。然而同 VM 不同的是,container 的进程间交互实际上还是 host 上具有相同 pid namespace 中的进程间交互,因此需要在 IPC 资源申请时加入 namespace 信息 - 每个 IPC 资源有一个唯一的 32 位 ID。

    4)、mnt namespace

    类似 chroot,将一个进程放到一个特定的目录执行。mnt namespace 允许不同 namespace 的进程看到的文件结构不同,这样每个 namespace 中的进程所看到的文件目录就被隔离开了。同 chroot 不同,每个 namespace 中的 container 在 /proc/mounts 的信息只包含所在 namespace 的 mount point。

    5)、uts namespace

    UTS("UNIX Time-sharing System") namespace 允许每个 container 拥有独立的 hostname 和 domain name, 使其在网络上可以被视作一个独立的节点而非 Host 上的一个进程。

    6)、user namespace

    每个 container 可以有不同的 user 和 group id, 也就是说可以在 container 内部用 container 内部的用户执行程序而非 Host 上的用户。

    二、资源限制:Control Groups (cgroups)

    命名空间为新创建的进程隔离了文件系统、网络并与宿主机器之间的进程相互隔离,但是命名空间并不能够为我们提供物理资源上的隔离。但是如果在同一台机器上运行了多个对彼此以及宿主机器一无所知的容器,这些容器却共同占用了宿主机器的物理资源。

    而 Control Groups(简称 CGroups)就是能够隔离宿主机器上的物理资源,例如 CPU、内存、磁盘 I/O 和网络带宽。每一个 CGroup 都是一组被相同的标准和参数限制的进程,不同的 CGroup 之间是有层级关系的,也就是说它们之间可以从父类继承一些用于限制资源使用的标准和参数。

    cgroups 实现了对资源的配额和度量。 cgroups 的使用非常简单,提供类似文件的接口,在 /cgroup 目录下新建一个文件夹即可新建一个 group,在此文件夹中新建 task 文件,并将 pid 写入该文件,即可实现对该进程的资源控制。groups 可以限制 blkio、cpu、cpuacct、cpuset、devices、freezer、memory、net_cls、ns 九大子系统的资源,以下是每个子系统的详细说明:

    以上九个子系统之间也存在着一定的关系. 详情请参阅官方文档。

    推荐学习:《docker视频教程

    以上就是docker核心技术是哪两个的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Docker
    上一篇:docker编译的镜像放在哪个目录 下一篇:docker生态圈有哪些
    千万级数据并发解决方案

    相关文章推荐

    • docker中solr有什么作用• docker的日志存储在什么地方• docker中容器时间和宿主机时间不同步怎么办• 什么是docker集群与镜像• 怎么查看使用的docker是哪个版本• docker容器自动退出的原因是什么
    1/1

    PHP中文网