最核心的是 Docker Daemon咱们称之为Docker守护进程,也就是Server端,Server端能够部署在远程,也能够部署在本地,由于Server端与客户端(Docker Client)是经过Rest API进行通讯。
docker CLI 实现容器和镜像的管理,为用户提供统一的操做界面,这个 客户端提供一个只读的镜像,而后经过镜像能够建立一个或者多个容器(container),这些容器能够只是一个RFS(Root File System),也能够是一个包含了用户应用的RFS。容器在docker Client中只是一个进程,两个进程是互不可见的。docker
Docker使用C/S架构,Client 经过接口与Server进程通讯实现容器的构建,运行和发布。client和server能够运行在同一台集群,也能够经过跨主机实现远程通讯。安全
Docker三大核心概念服务器
Docker 镜像(Image)就是一个只读的模板。例如:一个镜像能够包含一个完整的操做系统环境,里面仅安装了 Apache 或用户须要的其它应用程序。镜像能够用来建立 Docker 容器,一个镜像能够建立不少容器。Docker 提供了一个很简单的机制来建立镜像或者更新现有的镜像,用户甚至能够直接从其余人那里下载一个已经作好的镜像来直接使用。网络
Docker 利用容器(Container)来运行应用。容器是从镜像建立的运行实例。它能够被启动、开始、中止、删除。每一个容器都是相互隔离的、保证安全的平台。能够把容器看作是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。架构
仓库是集中存放镜像文件的场所,仓库注册服务器(Registry)上每每存放着多个仓库,每一个仓库中又包含了多个镜像,每一个镜像有不一样的标签(tag)。目前,最大的公开仓库是DockerHub,存放了数量庞大的镜像供用户下载。
Docker仓库用来保存咱们的images,当咱们建立了本身的image以后咱们就可使用push命令将它上传到公有或者私有仓库,这样下次要在另一台机器上使用这个image时候,只须要从仓库上pull下来就能够了。
Docker的运行离不开这几位的支持,Docker的成功也是拜几位所赐。也有人会误觉得,Docker就是容器。但Docker只会傲娇地说:我不是容器,我是管理容器的引擎。工具
Docker是由Cgroup、NameSpace、rootfs和容器引擎(用户态工具)组成。性能
Cgroup是Control group的简写,属于Linux内核的一个特性,用于限制和隔离一组进程对系统资源的使用,也就是作资源QOS,主要用来对共享资源进行隔离、限制、审计等。只有能控制分配到容器的资源,才能避免多个容器同时运行时对宿主机系统的资源竞争。控制组能够提供对容器的内存、CPU、磁盘IO等资源进行限制和计费管理。控制组的设计目标是为不一样的应用状况提供统一的接口,从控制单一进程(好比nice工具)到系统级虚拟化(包括OpenVZ、Linux-VServer、LXC等)。从实现的角度来看,Cgroup中实现的子系统其做用以下:测试
从而可见Cgroup主要的做用是如下几点。操作系统
NameSpace是将内核的全局资源作封装,使得每一个NameSpace都有一份独立的资源,所以不一样的进程在各自的NameSpace内对同一种资源的使用不会互相干扰。目前Linux内核公共实现了6种NameSpace:设计
Linux 的命名空间机制提供了七种不一样的命名空间,包括 CLONE_NEWCGROUP、CLONE_NEWIPC、CLONE_NEWNET、CLONE_NEWNS、CLONE_NEWPID、CLONE_NEWUSER 和 CLONE_NEWUTS,经过这七个选项咱们能在建立新的进程时设置新进程应该在哪些资源上与宿主机器进行隔离。
挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统,就是所谓的“容器镜像”;一个最多见的rootfs,或者说容器镜像,会包括以下所示的一些目录和文件,好比/bin /etc/ proc等等。对Docker项目来说,最核心的管理是为等待建立的用户进程:
这样一个完整的容器就诞生了。须要明确的是rootfs只是一个操做系统所包含的文件、配置和目录,并不包括操做系统的内核(bootfs包含了BootLoader和Kernel), 在Linux操做系统中,这两部分是分开存放的,操做系统只有在开机启动
时才会加载指定版本的内核。
因此说,rootfs 只包括了操做系统的“躯壳”,并无包括操做系统的“灵魂”。