实际上,容器的开发比docker.docker不等于容器,而“容器”是一系列内核特征的集体名称。
2000年,发布了LXC容器,这是一种内核虚拟化技术,可以提供轻巧的虚拟化,以隔离流程和资源。LXC是Docker使用的特定内核函数的实现。
2013年,Docker发行,与Linux技术(例如LXC,Union File System和Cgroups)相结合,以创建容器化标准。此外,Docker介绍了船舶(已发布)的概念,并构建了一套构建的Ship-Raun软件开发过程,,该过程,使软件开发,发布和操作更加容易。
施工方法Maven包装Dockerfile交付方法罐装或Warr容器很弱,开发环境,测试环境和生产环境很难保持一致。方法通过名称空间,该过程只能看到与您自己相关的资源。在不同的名称空间下是孤立的,无法被感知。NAMESPACE是全球系统资源的封装隔离,在不同的名称空间下使该过程具有独立的全球系统资源,更改名称空间下的系统资源只会影响此命名空间下的过程。
Linux内核的主要目的之一证实了名称空间是实现轻量级虚拟化服务。在同一名称空间下的过程可以感觉到彼此的存在。在系统中,以实现隔离的目的。
从Dokcer实现的角度来看,您可以通过Chroot命令切换根目录的安装点,以便将文件系统隔离。
该容器具有独立的IP,端口和路由,并且在网络之间隔离。容器具有自己的PID(过程编号)和主机的PID。容器具有自己的用户,需要隔离用户组。
通过隔离这些全局系统资源,容器中的过程看起来像一个独立的系统环境。有一些用于进程和名称空间操作的Linux命令,例如:Clone.Create new Process并指定他的命名空间。
CGroups是Linux内核提供的一种机制,可以限制一个过程或多个过程,可以实现内存,CPU等的精制控制。
CGroups的全名是对照组,CGroups定义了可以控制的每个资源的子系统。类型子系统简介如下:
其中的每个子系统都需要与内核的其他模块匹配,以完成资源控制。
Cgroup的分层结构:
上图描述了从整体结构中描述过程和cgroup之间的关系。底部p表示一个过程。描述符每个过程中的指针指向辅助数据结构CSS_SET(cgroups subsysystemse)。该过程指向一个指向一个CSS_SET将添加到当前的CSS_SET进程链接列表中。一个进程只能与CSS_SET相关,CSS_SET可以包含多个进程,并且属于同一CSS_SET的过程受相同的CSS_SET限制。
上图中的“ M×N链接”表明,CSS_SET可以通过辅助数据结构与CGroups节点关联。同一时间。这是因为CGroups不允许对同一资源进行多个限制。
当css_set关联多个cgroups层次结构节点时,它表明需要由当前CSS_SET下的过程控制多个资源。当CGroups节点与多个CSS_SET关联时,它指示多个CSS_SET下的过程列表相同的限制。相同的资源。
联合文件系统是一种组合文件系统,结合了与同一目录的多个不同位置(Union Mount)的目录相结合,Docker使用此组合安装的能力将容器图像中的多层内容显示为统一的内容。rootfs(root文件系统),rootfs打包了整个操作系统的文件和目录,并且是应用程序操作所需的最完整的“依赖库”。
Docker中使用AUFS(另一个联合文件系统或高级多层统一文件系统)是一个联合文件系统。AUFS不仅可以为每个目录设置ReadOnly,ReadWrite和WiteOut-witeOut-witeEout-wite-witeout-wite-witeout-wite同时,AUFS还可以支持分层机制。为了进行审查,不影响读取的唯一部分。
当Docker使用镜子启动容器时,Docker映像将分配文件系统并将新的可读层安装到container.Add到Mirror.Docker的当前类型的关节文件系统包括AUFS,BTRFS,VFS,VFS和DeviceMapper。
在Docker中,上图取决于下层的图像,因此下层的下图称为父图像,而父映像的图像称为基本图像。
因此,如果您想从图像启动一个容器,Docker将首先加载他的父亲图像直到基本图像,并且用户的过程在可写的文件系统层中运行。
ID,网络和LXC管理的所有父映像和资源限制中的数据信息以及特定容器的配置构成了容器的Docker概念。
Docker容器的安全问题是共享内核,因此攻击攻击时攻击面将特别大。
SELINUX的主要作用是最大程度地减少系统服务过程中服务过程的资源(最低权限原理)。
在使用Selinux操作系统时,有必要确定是否可以访问资源。除了资源是否具有用户的权限(读取,写作,执行)之外,您还需要确定每种流程是否具有某种类型的流程来获得某个Typeresource访问权限。
这样,即使该过程作为root运行,也有必要确定此过程的类型以及允许访问的资源类型以确定是否允许访问某个资源。该过程的活动空间可以也可以最小化。
即使是作为根部运行的服务过程通常只能访问所需的资源。