Docker技术简介

1、Docker引擎

         最核心的是 Docker Daemon咱们称之为Docker守护进程,也就是Server端,Server端能够部署在远程,也能够部署在本地,由于Server端与客户端(Docker Client)是经过Rest API进行通讯。
        docker CLI 实现容器和镜像的管理,为用户提供统一的操做界面,这个 客户端提供一个只读的镜像,而后经过镜像能够建立一个或者多个容器(container),这些容器能够只是一个RFS(Root File System),也能够是一个包含了用户应用的RFS。容器在docker Client中只是一个进程,两个进程是互不可见的。
docker



2、Docker架构

image         Docker使用C/S架构,Client 经过接口与Server进程通讯实现容器的构建,运行和发布。client和server能够运行在同一台集群,也能够经过跨主机实现远程通讯。安全

Docker三大核心概念服务器

  • 镜像(image):
  •         Docker 镜像(Image)就是一个只读的模板。例如:一个镜像能够包含一个完整的操做系统环境,里面仅安装了 Apache 或用户须要的其它应用程序。镜像能够用来建立 Docker 容器,一个镜像能够建立不少容器。Docker 提供了一个很简单的机制来建立镜像或者更新现有的镜像,用户甚至能够直接从其余人那里下载一个已经作好的镜像来直接使用。网络

  • 容器(container):
  •          Docker 利用容器(Container)来运行应用。容器是从镜像建立的运行实例。它能够被启动、开始、中止、删除。每一个容器都是相互隔离的、保证安全的平台。能够把容器看作是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。架构

  • 仓库(repository):
  •          仓库是集中存放镜像文件的场所,仓库注册服务器(Registry)上每每存放着多个仓库,每一个仓库中又包含了多个镜像,每一个镜像有不一样的标签(tag)。目前,最大的公开仓库是DockerHub,存放了数量庞大的镜像供用户下载。
              Docker仓库用来保存咱们的images,当咱们建立了本身的image以后咱们就可使用push命令将它上传到公有或者私有仓库,这样下次要在另一台机器上使用这个image时候,只须要从仓库上pull下来就能够了。
              Docker的运行离不开这几位的支持,Docker的成功也是拜几位所赐。也有人会误觉得,Docker就是容器。但Docker只会傲娇地说:我不是容器,我是管理容器的引擎。
    工具

    3、Docker组成

    Docker是由Cgroup、NameSpace、rootfs和容器引擎(用户态工具)组成。性能

    docker-core-techs

    3.一、Cgroup

           Cgroup是Control group的简写,属于Linux内核的一个特性,用于限制和隔离一组进程对系统资源的使用,也就是作资源QOS,主要用来对共享资源进行隔离、限制、审计等。只有能控制分配到容器的资源,才能避免多个容器同时运行时对宿主机系统的资源竞争。控制组能够提供对容器的内存、CPU、磁盘IO等资源进行限制和计费管理。控制组的设计目标是为不一样的应用状况提供统一的接口,从控制单一进程(好比nice工具)到系统级虚拟化(包括OpenVZ、Linux-VServer、LXC等)。从实现的角度来看,Cgroup中实现的子系统其做用以下:测试

    • devices:设备权限控制
    • cpuset:分配指定的cpu和内存节点
    • cpu:控制cpu的占用率
    • cpuacct:统计cpu的使用状况
    • memory:限制内存的使用上限
    • freezer:冻结(暂停)Cgroup中的进程
    • net_cls:配合tc(traffic controller)限制网络带宽
    • net_prio:设置进程的网络流量优先级
    • huge_tlb:限制HugeTLB的使用
    • perf_event:容许Perf工具基于Cgroup分组作性能测试

            从而可见Cgroup主要的做用是如下几点。操作系统

    1. 资源限制(Resource limiting):能够将组设置为不超过设定的内存限制。好比:内存子系统能够为进程组设定一个内存使用上限,一旦进程组使用的内存达到限额再申请内存,就会出发Out of Memory警告。
    2. 优先级(Prioritization):经过优先级让一些组优先获得更多的CPU等资源。
    3. 资源审计(Accounting):用来统计系统实际上把多少资源用到适合的目的上,可使用cpuacct子系统记录某个进程组使用的CPU时间。
    4. 隔离(isolation):为组隔离命名空间,这样一个组不会看到另外一个组的进程、网络链接和文件系统。
    5. 控制(Control):挂起、恢复和重启动等操做。

    3.二、NameSpace

            NameSpace是将内核的全局资源作封装,使得每一个NameSpace都有一份独立的资源,所以不一样的进程在各自的NameSpace内对同一种资源的使用不会互相干扰。目前Linux内核公共实现了6种NameSpace:设计

    • IPC:隔离进程间通讯(System V IPC和POSIX消息队列):
    • Network:隔离网络资源
    • Mount:隔离文件系统挂载点
    • PID:隔离进程ID
    • UTS:隔离主机名和域名
    • User:隔离用户ID和组ID

          Linux 的命名空间机制提供了七种不一样的命名空间,包括 CLONE_NEWCGROUP、CLONE_NEWIPC、CLONE_NEWNET、CLONE_NEWNS、CLONE_NEWPID、CLONE_NEWUSER 和 CLONE_NEWUTS,经过这七个选项咱们能在建立新的进程时设置新进程应该在哪些资源上与宿主机器进行隔离。

    3.三、rootfs

            挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统,就是所谓的“容器镜像”;一个最多见的rootfs,或者说容器镜像,会包括以下所示的一些目录和文件,好比/bin /etc/ proc等等。对Docker项目来说,最核心的管理是为等待建立的用户进程:

    • 启用Linux NameSpace隔离配置;
    • 设置指定的Cgroup限制参数;
    • 切换进程的根目录(Change Root)

            这样一个完整的容器就诞生了。须要明确的是rootfs只是一个操做系统所包含的文件、配置和目录,并不包括操做系统的内核(bootfs包含了BootLoader和Kernel), 在Linux操做系统中,这两部分是分开存放的,操做系统只有在开机启动

    时才会加载指定版本的内核。

            因此说,rootfs 只包括了操做系统的“躯壳”,并无包括操做系统的“灵魂”。

    4、Docker容器的能力

    • 文件系统隔离:每一个容器都有本身的root文件系统;
    • 进程隔离:每一个容器都运行在本身的进程环境中;
    • 网络隔离:容器间的虚拟网络接口和IP地址都是分开的;
    • 资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每一个Docker容器;
    相关文章
    相关标签/搜索