初识Docker
一、容器与虚拟化
容器并不是一个新的技术,同样虚拟化也不是一个新鲜事物,都拥有者漫长的历史。
虚拟化的分类有很多种,比如之前我们大家可能都比较熟悉的管理程序虚拟化,是通过中间层将一台或者多台独立的机器运行于物理硬件之上,但是容器则是直接运行在操作系统的内核之上的用户空间,因此容器也被称作"操作系统级虚拟化"。
容器技术可以让多个独立的用户空间运行在同一台宿主机上。
但是由于容器是依赖于操作系统的,所以容器中只能运行于底层宿主机相同或者相似的操作系统,这也是它的一个局限性。
还有一个有别于管理程序虚拟化,前者是完全独立的操作系统,而容器是依赖于操作系统,所以容器被认为是不安全的,如果底层的操作系统受到危害,那么在其上层的容器就会受到影响。
但是也存在不同的观点,正因为虚拟机虚拟的是一个完全的操作系统,这无疑增大了被攻击的范围,而且还要考虑管理程序底层存在的危险。
总之就是万物无完美,择其一而用之。
前面我们说容器技术,虚拟化技术都不是新出来的技术,那么为什么在近几年才风行起来呢?
正式因为Open VZ , Solaris Zones, Lxc等技术的出现,使得原本操作不易,功能单一的容器如虎添翼,有了这些技术的加持,容器不再是一个单纯的运行环境,在自己的权限范围内,更像是一个完整的宿主机。
对于Docker来说,它得益于现代的Liunx特性,如空间组(control group),命名空间(Namespace),使得容器与真实宿主机之间隔离的更加彻底,让容器可以有自己独立的网络和存储栈,还拥有自己的资源管理能力,使得在同一台宿主机中,可以让多个容器共同友好的共存。
容易也被认为是现代的精益技术,因为创建和管理一个容器的开销有限,和传统的完全虚拟化和半虚拟化相比,容器不需要模拟层和管理层,而是使用操作系统的系统调用接口,这个大大的降低了单个容器运营的成本,也使得在一个宿主机中可以运行更多的容器。
最后其实想说,容器技术之所以这么没有被广泛的认可,还有一个重要的原因,就是技术比较复杂,不易安装,管理同时自动化运维也比较困难,但是Docker就是为了改变这一切而生的!
二、Docker技术
上面介绍了那么多的虚拟化和容器,那么Docker到底是什么呢?
Docker是一个可以把我们开发的应用程序自动部署到容器中的开源引擎。那么Docker除了做这些,还有什么特别的地方吗?
答案是有的,Docker在虚拟化的容器执行环境中增加了一个应用程序部署引擎,该引擎的目标就是提供一个轻量级的,快速的环境,能够运行开发者的应用,并且方便高效的将程序从开发者的笔记本部署到测试环境中,然后再部署到生产环境中。
Docker是使用其实也与现在越来越流行的DevOps有关系,通过Docker,我们的开发人员只需要关系容器中运行的应用程序,运维人员只需要关注如果管理容器,同时Docker还能保证,程序在测试环境和生产环境的部署一致性,尽量降低那种在测试环境一切正常,一到生产就出现莫名其妙的问题的状况。
三、Docker的组件
- 1.Docker客户端和服务器,也称为Docker引擎
- 2.Docker镜像
- 3.Registry
- 4.Docker容器
1.Docker引擎
首先Docker是一个CS的程序,Docker的客户端只需要想Docker服务器或者是守候进城发出请求,服务器或者守候进城将完成所有工作并且返回结果,Docker的守候进城有时有被成为Docker引擎。
2.Docker镜像
镜像是Docker的基石,用户基于镜像来构建自己的容器。镜像是基于联合文件系统的一种层式的结构,由一系列的指令构建出来的。
3.Registry
Docker用Registry来保存用户的镜像,分为公共和私有两种。Docker公司运营的公共Registry叫做Docker Hub。
4.Docker容器
Docker可以帮助用户构建和部署容器,用户只需要把自己的应用程序或者服务打包放进容器 。因为容器是根据镜像启动起来的,在容器中可以运行一个或者多个进程。
Docker是借鉴了标准集装箱的概念,标准集装箱将货物运往世界各地,Docker也是采用了这个哲学,只是集装箱运送货物,Docker运送软件。
每个容器都包含一个软件镜像,也就是容器的货物。而与真正的货物一样,容器里的软件镜像可以进行一些操作,启动,关闭,重启等等。
和标准集装箱一样,Docker在执行上述操作的时候,其实不关心容器里面装的是什么,所有的镜像都是安装相同的方式进行装载。
Docker也不关心用户把容器运送到哪里,用户可以在自己的笔记本中还是部署到服务器上,就像标准集装箱一样,方便叠加替换,且通用。
四、Docker能做什么
说了很多关于Docker本身的东西,但是有时候我们往往忽略的初心,Docker看似很好,但是我们在哪些场景中可以更好的使用Docker给我们带来的便利呢?
- 能够让独立的服务或者应用在不同的环境中,得到相同的运行结果。这一点在面向服务的架构和重度依赖微服务模型的部署中尤其重要
- 构建一个PaaS的基础设施
- 提供SaaS的应用程序
五、Docker的技术组件
Docker可以运行在任何安装了现代Lunix内核的x64主机上。推荐的内核版本是3.8或者更高。Docker的开销比较低,可以用于服务器,台式机或者笔记本中,它包括以下几个部分:
1.一个原生的Liunx容器格式,Docker中成为libcontainer
2.Linux内核命名空间,用于隔离文件系统,进程和网络
3.文件系统隔离:每个容器都有自己的root文件系统
4.进程隔离:每个容器都运行在自己的进程环境中
5.网络隔离:容器间的虚拟网络接口和IP都是分开的
6.资源隔离和分组:使用cgroups(既control group , Linux的内核特性之一)将CPU和内存之类的资源独立分配个每个Docker容器
7.写时复制:copy-on-write , 文件系统都是通过写时复制创建的,这就意味着文件系统是分层的,快速的,而且占用的磁盘空间比较小。
8.日志:容器产生的STDOUT,STDERR和STDIN这些IO流都会被收集记录到日志中,用来进行日志的分析和故障排错
9.交互式Shell:用户可以创建一个伪tty终端,将其链接到STDIN,为容器提供一个交互式的Shell

浙公网安备 33010602011771号