容器基础二:隔离与限制
隔离
概念解释
1、Namespace:是Linux 容器中用来实现“隔离”的技术手段,Namespace 技术实际上修改了应用进程看待整个计算机“视图”,即它的“视线”被操作系统做了限制,只能“看到”某些指定的内容
2、docker engine:不等同于Hypervisor,并不像 Hypervisor 那样对应用进程的隔离环境负责,也不会创建任何实体的“容器”,真正对隔离环境负责的是宿主机操作系统本身
3、容器中的应用:用户运行在容器里的应用进程,跟宿主机上的其他进程一样,都由宿主机操作系统统一管理,只不过这些被隔离的进程拥有额外设置过的 Namespace 参数。而 Docker 项目在这里扮演的角色,更多的是旁路式的辅助和管理工作(docker甚至可以去掉?那由谁来替代呢)
容器化的特点
- 节省资源:采用虚拟机方式,每个虚拟机都需哟有一个操作系统,这会带来巨大的资源损耗,而采取容器化的方式也不需要单独的擦左系统,而且namespace占用的资源可以忽略不计
- 敏捷和高性能:这是最大的优势
- 隔离的不彻底:1)因为容器是运行在宿主机上的一种特殊的进程,多个容器共同使用一个宿主机的操作系统的内核;2)有很多资源和对象是不可以被namespace的,比如时间,也就是说整个系统的时间是统一在的,这会导致容器内的操作自由度是有一定限制的,有些可以做,有些就不可以做
限制
限制采用的技术
1)Linux Cgroups 就是 Linux 内核中用来为进程设置资源限制的一个重要功能,一是就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。二是对进程进行优先级设置、审计,以及将进程挂起和恢复等操作;2)Linux Cgroups 的设计就是一个子系统目录加上一组资源限制文件的组合,即为每一个容器创建一个控制组
限制不完善的地方
应用程序在容器里读取到的 CPU 核数、可用内存等信息都是宿主机上的数据,这会给应用的运行带来非常大的困惑和风险
总结
- 一个正在运行的 Docker 容器,其实就是一个启用了多个 Linux Namespace 的应用进程,而这个进程能够使用的资源量,则受 Cgroups 配置的限制。
- 隔离是用的namespace技术,但是无法实现彻底隔离;限制采用的是cgroups技术
- 容器是“单进程”模型:在一个容器中,你没办法同时运行两个不同的应用,除非你能事先找到一个公共的 PID=1 的程序来充当两个不同应用的父进程
小知识
1.pid是父进程
问题
1、centos是什么东西?