Docker是PaaS 提供商 dotCloud 开源的一个基于 LXC (LXC是Linux原生支持的容器技术,能够提供轻量化的虚拟化,docker提供LXC的高级封装,发展标准的配置方法)的高级容器引擎,源代码托管在 Github 上, 基于go语言并听从Apache2.0协议开源。Docker是经过内核虚拟化技术(namespace以及cgroups等)来提供容器的资源隔离与安全保障。因为Docker经过操做系统层的虚拟化实现隔离,因此Docker容器在运行时,不须要相似虚拟机( VM)额外的操做系统开销,提升资源利用率。git
Docker是使用Go语言编写的一个程序运行、测试、交付的开放平台,Docker被设计为可以使你快速地交付应用。在Docker中,你能够将你的程序分为不一样的基础部分,对于每个基础部分均可以当作一个应用程序来管理。Docker可以帮助你快速地测试、快速地编码、快速地交付,而且缩短你从编码到运行应用的周期。Docker使用轻量级的容器虚拟化平台,而且结合工做流和工具,来帮助你管理、部署你的应用程序。Docker在其核心,Docker实现了让几乎任何程序均可以在一个安全、隔离的容器中运行。安全和隔离能够使你能够同时在机器上运行多个容器。Docker容器轻量级的特性,意味着能够获得更多的硬件性能。docker
Docker 主机(Host):一个物理机或虚拟机,用于运行Docker服务进程和容器。ubuntu
Docker服务端(Server):Docker守护进程,运行docker容器。安全
Docker客户端(Client):客户端使用docker命令或其余工具调用docker API。svn
Docker仓库(Registry):保存镜像的仓库,相似于git或svn这样的版本控制系统。工具
Docker镜像(Images):镜像能够理解为建立实例使用的模板。性能
Docker容器(Container):容器是从镜像生成对外提供服务的一个或一组服务。测试
统一的官方仓库:https://hub.docker.com/编码
Docker原理:创建-->传送-->运行spa
经过Docker Hub或者本身的Docker仓库分享Docker镜像, 从Docker镜像建立Docker容器, 在容器里运行应用程序。
Docker镜像是Docker容器运行时的只读模板,每个镜像由一系列的层(layers)组成;Docker使用UnionFS(联合文件系统)来将这些层联合到一二镜像中,UnionFS文件系统容许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,造成一个单独连贯的文件系统。
正由于有了这些层(layers)的存在,Docker才会如此的轻量。当你改变了一个Docker镜像,好比升级到某个程序到新的版本,一个新的层会被建立。所以,不用替换整个原先的镜像或者从新创建(在使用虚拟机的时候你可能会这么作),只是一个新的层被添加或升级了。因此你不用从新发布整个镜像,只须要升级。层使得分发Docker镜像变得简单和快速。
每一个镜像都是从一个基础的镜像开始的,好比ubuntu,一个基础的Ubuntu镜像,或者是Centos,一个基础的Centos镜像。你能够使用你本身的镜像做为新镜像的基础,例如你有一个基础的安装了Nginx的镜像,你能够使用该镜像来创建你的Web应用程序镜像。(Docker一般从Docker Hub获取基础镜像)
Docker镜像从这些基础的镜像建立,经过一种简单、具备描述性的步骤,咱们称之为 指令(instructions)。每个指令会在镜像中建立一个新的层,指令能够包含这些动做:
-> 运行一个命令。
-> 增长文件或者文件夹。
-> 建立一个环境变量。
-> 当运行容器的时候哪些程序会运行。
这些指令存储在Dockerfile文件中。当你须要创建镜像的时候,Docker能够从Dockerfile中读取这些指令而且运行,而后返回一个最终的镜像。
Docker仓库是Docker镜像的存储仓库。能够推送镜像到Docker仓库中,而后在Docker客户端,能够从Docker仓库中搜索和拉取镜像。
一个Docker容器包含了一个操做系统、用户添加的文件和元数据(meta-data)。每一个容器都是从镜像创建的,镜像告诉Docker容器内包含了什么,当容器启动时运行什么程序,还有许多配置数据。Docker镜像是只读的,当Docker运行一个从镜像创建的容器,它会在镜像顶部添加一个可读写的层,应用程序能够在这里运行。