容器技术认知

  现如今,Docker容器大行其道,容器技术可以看做是沙盒,被装入沙盒的应用可以独立运行,不会互相干扰,也最方便四处搬移。

  这个沙盒主要用三种技术隔离出来。

一、Linux namespace

  Namespace是基于Linux内核的底层概念,以一种抽象的方式封装内核资源,通过将内核资源放在不同的Namespace中,来实现资源隔离的效果。Linux已提供了以下隔离机制(不同内核版本可能不同)

  • Mount:隔离文件系统挂载点
  • IPC:隔离进程通信
  • Network:隔离网络资源
  • PID:进程PID隔离
  • User:隔离用户和用户组
  • UTS:隔离主机名

  虽然Linux提供了如此多的内核资源隔离技术,但需要明确的是,容器本身只是一个应用了多种Namespace的进程而已,多个容器之间仍然共享同一个宿主机的操作系统内核。

二、Linux Cgroup

  全称是 Linux Control Group。最主要的作用就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。同时还有诸如优先级分配,资源统计和任务恢复挂起控制的功能。

  在Linux系统中以文件和目录的方式暴露在/sys/fs/cgroup 路径下。在这个目录下,有很多像cpuset、cpu、 memory的子目录,这些就是可以被Cgroups进行限制的资源种类。

三、rootfs根文件系统

  rootfs就是所谓的容器镜像,包括了一个完整的操作系统的文件、目录和配置,并不包含操作系统内核。

  正是由于rootfs的存在,容器技术所宣传的‘一致性’才得到保证。对于一个镜像而言,打包的不只是应用,还包含操作系统,那么无论在任何一台机器上解压镜像,应用运行的环境就已经重现了出来。

  Docker容器的rootfs使用AuFS将多个rootfs联合挂载成一个rootfs。

  Docker的rootfs由三部分组成。

  • 只读层:包含操作系统的一部分
  • 可读写层:存放修改rootfs后产生的增量
  • Init 层:存放 /etc/hosts、/etc/resolv.conf 等只对当前的容器有效的配置

     

     

posted @ 2023-02-28 15:23  阳光、大地和诗歌  阅读(31)  评论(0编辑  收藏  举报