DOCKER

什么是docker(隔离的进程)

基于 Linux 内核的 cgroupnamespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

为什么用docker

更高效的利用系统资源

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效

更快速的启动时间

Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。

一致的运行环境

Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性

更轻松的维护、扩展和迁移

Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单

基本概念

镜像(linux root 文件系统(rootfs))

rootfs其实就是针对特定的操作系统架构的一种实现形式。具体表现为,特定的文件夹,文件夹之间的关系,即组织架构,以及特定的各种文件。

Linux中的rootfs,就是那些文件夹和文件,包括根文件目录 /,系统相关的配置文件目录/etc,存放系统启动相关配置的/etc/init,存放系统相关的工具 /sbin,存放用户的工具/usr/bin

Docker 镜像是一个特殊的文件系统rootfs,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像充分利用 了Union FS 的技术,被设计为分层存储的架构。因此镜像并非是像一个 ISO 那样的打包文件。镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。

镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。

容器(镜像运行的实体)

容器的实质是进程,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。

每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层

仓库(镜像集中存储)

Docker Registry(集中的存储、分发镜像的服务)

一个 Docker Registry 中可以包含多个 仓库Repository);每个仓库可以包含多个 标签Tag);每个标签对应一个镜像。

底层实现技术

Namespaces

Linux namespace 实现了 6 项资源隔离,基本上涵盖了一个小型操作系统的运行要素,包括主机名、用户权限、文件系统、网络、进程号、进程间通信。

Namespaces.png
Control groups

CgroupLinux内核提供的一种可以限制、记录、隔离进程组所使用的物理资源的机制。它是将任意进程进行分组化管理的Linux内核功能。

cgroups是基于内核的进程级资源等隔离工具。中的资源控制都是以为单位实现的。提供了以下功能:

  1. 限制进程组可以使用的资源数量。比如:memory子系统可以为进程组设定一个memory使用上限,一旦进程组使用的内存达到限额再申请内存,就会出发OOM

  2. 进程组的优先级控制。比如:可以使用cpu子系统为某个进程组分配特定cpu share

  3. 记录进程组使用的资源数量。比如:可以使用cpuacct子系统记录某个进程组使用的cpu

  4. 进程组隔离。比如:使用ns子系统可以使不同的进程组使用不同的namespace,以达到隔离的目的,不同的进程组有各自的进程、网络、文件系统挂载空间

  5. 进程组控制。比如:使用freezer子系统可以将进程组挂起和恢复。

Union File System

Docker的存储驱动的实现是基于Union File System,简称UnionFS,他是一种为LinuxFreeBSDNetBSD 操作系统设计的,把其他文件系统联合到一个联合挂载点的文件系统服务。它用到了一个重要的资源管理技术,叫写时复制。写时复制(copy-on-write),也叫隐式共享,是一种对可修改资源实现高效复制的资源管理技术。对于一个重复资源,若不修改,则无需立刻创建一个新的资源,该资源可以被共享使用。当发生修改的时候,才会创建新资源。这会大大减少对于未修改资源复制的消耗。Docker正式基于此去创建imagescontainers

你可能感兴趣的:(DOCKER)