Docker学习笔记1

PaaS:

一、虚拟化分类:

        虚拟化资源提供者:

        1)硬件平台虚拟化

        2)操作系统虚拟化

        虚拟化实现方式:

        type I: 半虚拟化

        type II:硬件辅助全虚拟化

        type III:

                软件全虚拟化:

                操作系统虚拟化:

       

主机虚拟化与容器虚拟化的优缺点:

        主机虚拟化:

                应用程序运行环境强隔离;

                虚拟机操作系统与底层操作系统无关化

                虚拟机内部操作不会影响到物理机

                拥有操作系统会占用部署资源及存储

                网络传输效率低

                当应用程序需要调用硬件响应用户访问时间延时大

        容器虚拟化

                优点:可以实现应用程序的隔离

                直接使用物理机的操作系统可以快速响应用户需求

                不占用部署时间(不需要安装操作系统)

                占用少量磁盘空间

                缺点:学习成本增加、操作控制复杂、网络控制与主机虚拟化有所区别、服务治理更难。服务与服务调用关系就很麻烦。容器的编排。(微服务架构工程师

云平台技术的实现:

Docker学习笔记1_第1张图片

 分别对应的是:

IaaS 虚拟机:

        阿里云ECS

        OpenStack VM实例

PaaS容器CaaS(容器即服务):

        LXC

        Docker

        OpenShift

        Rancher

SaaS应用程序:

        互联网中的应用

容器比虚拟机更抽象。

容器所涉及的内核技术:

六大命名空间:

UTS:UNIX Time-sharing System,命名空间允许每个容器拥有独立的主机名和域名,从而可以虚拟出一个独立主机名和网络空间的环境,就跟网络上的一台独立的主机一样。每一个命令空间都拥有独立的主机名或域名。

IPC:Interprocess Communication。每个容器依旧使用Linux内核中进程交互的方法,实现进程间通信。包括信号量、消息队列和共享内存等。不同空间的进程无法交互。同一个IPC命令空间内的进程彼此可见,允许进行交互。

Mount:类似chroot,将一个进程放到一个特定的目录执行,挂载命名空间允许不同命名空间的进程看到的文件结构不同,这样每个命名空间中的进程所看到的文件目录彼此隔离。每个容器的文件系统是独立的。

NET:通过网络命名空间,可以实现网络隔离。网络命令空间为进程提供了一个完全独立的网络协议的视图,包括网络设备接口、IPv4和IPv6协议栈,IP路由表、防火墙规则、Sockets等,这样,每个容器的网络就能隔离开来。Docker采用虚拟网络设备(Virtual Network Device)的方式,将不同命名空间的网络设备连接在一起,默认情况下,容器中的虚拟网络卡将同本地主机上的docker0网桥连接在一起。

USER:每个容器可以有不同的用户和组id,也就是说可以在容器内使用特定的内部用户执行程序,而非本地系统上存在的用户。

每个容器内部都可以有root账号,但跟宿主机的root用户不在一个命名空间。

通过使用隔离的用户命名空间可以提高安全性,避免容器内进程获得额外的权限。

PID:Linux通过命名空间管理进程号,对于同一个进程(即同一个task_struct)在不同的命名空间中,看到的进程号不相同,每个进程命名空间有一套自己的进程号管理方法。进程命名空间是一个父子关系的结构,子空间的进程对于父空间是可见的,新fork出的进程在父命名空间和子命名空间将分别有一个进程号来对应。每个容器都有独立的进程树,由容器是物理机中的一个进程,所以容器中的进程是物理机的线程。

总结:

容器的命令空间有哪些?

应用程序运行环境隔离的空间,就是一个容器。每个容器都将拥有UTS、IPC、Mount、Net、User、PID。

CGroups(Control Groups):

主机虚拟化实现资源隔离的方式

        使用Hypervisor中的VMM实现资源隔离

PAM:

        用户认证

        资源限制

                ulimit

控制组:

作用:用于实现容器的资源隔离;可对进程做资源隔离。

9大子系统:

把资源定义为子系统,可以通过子系统对资源进行限制。

CPU可以让进程使用CPU的比例。

Memory限制内存使用。

blkio限制块设备的IO。

cpuacct生成CGroup使用CPU的资源报告。

devices:允许或拒绝设备的访问。

freezer:暂停或恢复CGroup的访问。

net_cls:

ns:

你可能感兴趣的:(Docker容器,docker)