容器技术精髓剖析

namespace

namespace技术是为了对容器进行网络、通信、文件、权限等对象的隔离,namespace包含了6项隔离。

UTS:可以使主机拥有独立的主机名,隔离内容:主机名与域名

IPC:可以隔离容器之间的通信,在容器中的应用也需要拥有PID,隔离内容:信号量、消息队列和共享内容

PID:可以使同一个主机上的不同容器可以有相同的PID进程,隔离内容:进程编号

Network:可以使容器拥有自己的IP、端口、路由,隔离内容:网络设备、网络栈、端口

Mount:可以使容器拥有自己的文件系统,隔离内容:文件系统

User:可以实现用户权限的隔离,隔离内容:用户和用户组

Cgroups

Cgroups实现了对系统资源的限额和度量

利用namespace可以通过构建一个相对隔离的容器,而通过Cgroups可以为容器设置系统资源的配额包括了CPU、内存、I/O等,对于不同的系统资源,Cgroups也提供了统一的接口,对资源进行控制统计,但限制的具体方式不尽相同。如内存,当容器需要申请更多的内存时,就会触发Cgroups用户检测,如果用了超过Cgroups规定的限额,将会拒绝用户内存申请,否则会给予相应的内存并在Cgroups的统计信息中进行记录。实际操作中不仅要考虑内存的分配和回收,还要考虑不同类型的内存。

其他相关Linux Kernel技术

除了Namespace和Cgroups以外,Linux Kernel还提供了其他的技术来支撑容器的应用,如selinux、apparmor可以增强对容器的访问控制,capabilities的主要实现在于将超级用户root的权限分割成了不同的capabities权限,从而更严格地控制了容器权限,netlink技术可以完成Docker容器的网络环境配置和创建。这些Linux内核技术从安全、隔离、防火墙、访问等多个方面对容器的成熟落地打下来坚实的基础。

容器管理

Linux内核提供了各项隔离技术,容器就可以顺理成章地建立起来。两个重要技术:Lxc和libcontainer

Lxc是第一个完整意义上的容器管理技术,通过Lxc可以方便地创建、启动、停止容器,还可以通过它来操作容器中的应用,也可以查看容器中的运行状态等。

libcontainer是docker开发的用来代替Lxc的,它实际上是反向定义了一套接口标准,也就是libcontainer不是为了调用底层的namespace、cgroups等技术而设计的,而是定义了一套标准。namespace、cgroups符合这套标准,Docker引擎就可以运行起来,从而实现对容器的管理。此后如果有新的底层隔离技术也符合这套标准,docker也可以继续运行。这样的设计思想为docker的实现全面化的跨平台应用带来了可能。

Docker

Docker是传统的Client-Server架构,装好了docker以后,也就同时装好了Client端和Server端。Client端是Docker命令行工具,通过Client端可以发起创建、管理容器的指令至Server端进行处理。

Docker技术原理

Docker Daemon是通过libcontainer和lxc来完成容器管理操作的,Docker的三个重要组件execdriver、networkdriver、graphdriver。

execdriver:存储了容器定义的配置信息,libcontainer拿到这些配置信息以后,将会调用底层的namespace和cgroups等技术来完成容器的创建和管理。

networkdriver:完成Docker容器网络环境的配置,包括容器的IP地址、端口、防火墙策略、与主机的端口映射。

graphdriver:对容器镜像的管理。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值