Docker是基于go语言实现的开源容器项目。
官网网站为docker.com.
Docker项目已加入linux基金会,并遵循Apache2.0协议,全部开源代码均在https://githup.com/docker项目仓库中进行维护。
容器技术:容器有效的将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要及时编译。容器可以在核心CPU本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化(para-virtualization)和系统调用替换仲的复杂性。
简单的讲,读者可以将docker容器理解为一种轻量级的沙盒(sandbox),每个容器运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信。容器的创建停止十分快速,几乎跟创建和终止原生应用一致;另外,容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机,很多时候,甚至直接把容器当作应用本身也没有任何问题。
Docker以及其它容器技术都属于操作系统虚拟化这个范畴。传统方式是在硬件层次实现虚拟化,需要有额外的虚拟机 管理应用和虚拟机操作系统层。Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。
1、docker镜像:docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。镜像是创建docker容器的基础。通过版本管理和增量的文件系统,docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。
2、docker容器:docker容器类似一个轻量级的沙箱,docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例。它可以启动、开始、停止、删除,而这些容器彼此相互隔离、互不可见的。可以把容器看做一个简易版的linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。#注意:镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。
3、docker仓库:docker仓库类似于代码仓库,是docker集中存放镜像文件的场所。Docker仓库可以分为公开仓库(public)和私有仓库(private)两种形式。目前,最大的公共仓库是官方提供的docker hub,其中存放着数量庞大的镜像供用户下载。当然,用户如果不希望公开分享自己的镜像文件,docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。当用户创建了自己的镜像之后就可以使用push命令将它上传到指定的共有或者私有仓库。这样用户下次在另外一台机器上使用该镜像时,只需要将其从仓库上pull下来就可以了。
Docker引擎是使用docker容器的核心组件,可以再主流的操作系统和云平台上使用,包括linux操作系统,maxOS和windows操作系统,以及IBM、亚马逊、微软等知名平台。
Docker引擎:包括支持再桌面系统或云平台安装docker,以及为企业提供简单安全弹性的容器集群编排和管理;
DockerHub:官方提供的云托管服务,可以提供公有或私有的镜像仓库。
DockerCloud:官方提供的容器云服务,可以完成容器的部署与管理,可以完整地支持容器化项目,还有CI、CD功能。
Docker引擎目前分为两个版本;社区版本和企业版本。社区版本每个月会发布一次尝鲜(Edge)版本,每个季度(3、6、9、12月)会发行一次稳定(stable)版本。版本号命名格式为“年份.月份”
1、使用最广泛的开源容器引擎
2、一种操作系统级的虚拟化技术
3、依赖于Linux内核特性:Namespace和Cgroups
4、一个简单的应用程序打包工具
1、更快速的交付和部署
2、更高效的资源利用
3、更轻松的迁移和扩展
4、更简单的更新管理
1、Docker Client:客户端
2、Docker Daemon:守护进程
3、Docker Images:镜像
4、Docker Container:容器
5、Docker Registry:镜像仓库
Container |
VM |
|
启动速度 |
妙级 |
分钟级 |
运行性能 |
接近原生 |
5% 左右损失 |
磁盘占用 |
MB |
GB |
数量 |
成百上千 |
一般几十台 |
隔离性 |
进程级别 |
系统级(更彻底) |
操作系统 |
只支持 Linux |
几乎所有 |
封装程度 |
只打包项目代码和依赖关系,共享诉诸主机内核 |
完整的操作系统 |
1、应用程序打包和发布
2、应用程序隔离
3、持续集成
4、部署微服务
5、快速搭建测试环境
6、提供PaaS产品(平台即服务)