Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
关于docker理解
一、首先是关于虚拟化
虚拟化我们可以简单的理解为一种资源管理方式。有如下几种虚拟化的方式:
1.完全虚拟化:对底层硬件实现完全的虚拟。例如:Vmware Workstation
2.部分虚拟化:只对部分硬件资源的虚拟。
3.操作系统级虚拟化:内核通过创建多个虚拟操作系统实例来隔离各个进程。
docker就是属于操作系统级的虚拟化。
在计算机的世界中,容器拥有一段漫长且传奇的历史。容器与管理程序虚拟化 (hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中间层将一台或者多台独立 的机器虚拟运行与物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间。因 此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用户空间运行 在同一台宿主机上。
二、其次是对docker的理解
docker的思想来源于集装箱,试问集装箱解决了什么问题?
试想,在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会相互影响。那么我就不需要专门运送水果的船和专门运送化学物品的船了。只要这些货物在集装箱里装的好好的,那我就可以用一艘大船把它们都运走。docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮,而docker就是集装箱。
Docker的优点:
1.更快速地交付和部署
不同的应用程序可能会有不同的应用环境。比如,.net开发的网站和.php开发的网站所依赖的软件就不一样,如果把他们所依赖的软件都安装在一个服务器上,就要调试很久,不仅麻烦,还会造成一些诸如IIS和Apache访问端口冲突这样的问题。这个时候你就要隔离.net开发的网站和.php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机并在不同的虚拟机上部署不同的应用,但是虚拟机开销比较大。此时docker就可以实现虚拟机隔离不同应用的这种功能,并且开销比虚拟机小,小就意味着省钱。
2.更轻松的迁移和扩展
我们再来举个简单的例子。比如你开发的时候用的是Ubuntu,但是运维管理的都是CentOS,运维在把你开发的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转CentOS的问题,比如:存在一个特殊版本的数据库,只支持Ubuntu而不支持CentOS,那么在转移的过程中就得想办法解决这样的问题。但这时候如果有docker,你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。
3.更高效的虚拟化和更简单的管理
在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会被有效的利用起来。而且Docker容器的运行不需要额外的hypervisor支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
Docker的三个基本概念:
镜像、容器、仓库
三、Docker的三个基本概念的详解
1.镜像
Docker在英语当中的本意是“物件/码头工人”,docker容器的意思为物件的容器。关于镜像,举个简单的例子,我们经常安装的windows操作系统,先要从网上下载ISO镜像文件,经解压后才能安装和使用。Docker也是一样,我们要向创建docker容器,就需要创建容器的类似于ISO镜像文件的docker镜像文件。
2.容器
关于容器,大家肯定并不陌生。没错,docker容器就是来管理不同架构的应用程序的。从本质上来说,容器是从镜像创建的运行实例。容器与容器之间是相互隔离的,每个容器都是保证安全的平台。
3.仓库
关于仓库,就是可以存储镜像的仓库,可以自己搭建harbor,阿里云仓库,docker官方仓库等等,便于拉取部署等
而真正能理解docker的本质是进程,必须具备的是linux的基础知识,从基础知识角度来进行理解,否则就是雾里看花,糊里糊涂。
docker的两大关键技术是Namespace和cgroup,以及docker的关键创新镜像。这里不做过多的研究,有兴趣的朋友可以自行查询,如下提供的连接当中也有资料
来自资料: https://www.msdn.hk/jshtml/jswz/2574.html https://www.jianshu.com/p/a1a9be9f667a