认识大明星——轻量级容器docker知识树点亮

docker是一个轻量级容器,属于操作系统层面的虚拟化技术,封装了文件系统(AUFS)以及网络互联,进程隔离等特性。

传统虚拟化架构:

docker虚拟化架构:

可以看出,docker是没有Guest OS一层的,它属于宿主机上面开启的一个单独进程,共享宿主机的内核和硬件。 传统虚拟化技术每个实例都要虚拟出一套OS的硬件支持,当一台宿主机开启多个虚拟机的时候,这些硬件虚拟无疑是重复的,且占用了大量宿主机的资源。 因此,docker这种轻量级的容器技术会更高效地使用宿主机的内核和硬件资源。同时由于没有完整OS的启动,docker的启动也非常快,就像你在win10里面开启一个浏览器一样,可以类比出,docker的级别与OS上面的application是一层的。

docker库的架构: docker registry -> docker repository -> docker image docker

registry相当于一个邮轮,repository是邮轮上的集装箱,image是集装箱内部的系统镜像。

docker的最小单元为image,docker image是只读的,不支持修改,因此当你看上去修改了一个docker image,哪怕是只改了它的名字,docker的真实实现是复制出来一份列在下面,而原来的仍旧被保留。同时为便于文件管理,docker image 可以通过命令被export为tar包,也可以import tar包成为本地的image。



注意:docker只是提供了一个环境,这个概念是独特的,其他虚拟机是一个完全隔离开的封闭的就像一个完整的物理机那样,而docker的用户获得的是一个基于通用OS上面的一个相同的环境,只要使用相同的image,docker能运行起来,那么环境就是一致的。docker不限制OS的种类、版本,现在docker已经可以支持几乎所有流行的OS,这就使docker变成了跨平台技术,避免了用户环境变化导致的Bug。

docker container 是 docker image 的实例化。

docker提供的这个环境,可以达到如一个纯净OS一样对其进行具体的操作,如安装新的包,文件变更等。上面提到的docker的image是只读,不支持修改image本身,那么这个环境变更真的不是对image进行操作吗?

答:确实不是的,docker的文件系统是AUFS,当我们对image进行修改的时候,表面上是进入那个container,然后做安装命令,文件变更等修改,其实这些变更并不是发生在像传统虚拟系统那样在容器内部,而是在外部!docker container并不是一个封闭独立的空间。

这些变更是存在于本地文件路径/var/lib/docker/aufs/中,每次与原image不同的修改都会放在本地的这个目录中。然而docker也提供了修改这个默认目录的方式,就是在启动容器的时候,使用-v参数设置这个本地目录的映射,每一次修改都是针对映射的这个本地目录,但是要注意以后的每次启动都要带着这个-v参数和这个本地目录,否则又指向了默认的目录相当于启动一个新的container了。

我们来深究一下上面的操作,进入docker container以后,会发现终端的用户名和主机名,包括该用户的root目录([email protected]:~/)都与进入之前不同了,这就是linux的change root命令的效果,利用chroot命令将当前目录映射为该用户的root目录。当exit的时候,恢复到真正的用户root目录,对应的container也被退了出来。

如果想提交这个最新的变更后的环境,实际也是提交一个本地的image,通常是使用commit和dockerfile的方式,而commit方式每次都要提交具体的变更细节,深入docker的实现原理,它是将每次的commit的差异文件存在AUFS文件系统的diff文件夹中,这就很麻烦,因为每次部署环境的时候,如果要检查其中某次提交的文件变更,就要捋顺一遍这个commit列表,这实在是不方便。因此dockerfile的方式被广泛应用。dockerfile会记录以初始的基础image为原点的每次对环境的变更,例如安装了某个新的命令,它像一个描述文件,每当以dockerfile启动的时候,它会先启动其依赖的基础image,然后在按照dockerfile中的命令顺序一条条去执行,最终会获得一个变更后的环境。这样,部署人员只需要维护dockerfile中的代码即可。所有docker的用户仅需要本地拥有一个基础image,然后按照业务需要去get相应的dockerfile,启动的时候就会获得最新的环境,与同组其他同事获得的也会保持一致。

总结一下,docker是如此轻巧灵活仅相当于一个普通app开启一个宿主机的进程,image是只读,dockerfile用来描述变更,container修改映射到本地卷。



补充:

上面多次提到了docker的aufs文件系统,它非常强大,对应的路径是在/var/lib/docker/aufs,它可以分块Blob的去存储一个image,这个image是只读的,所以分块存储可以更快地读取。如果不做-v修改本地映射卷的话,它还可以存储用户在container中修改的变更文件。它还可以存储commit时与基础image的差异文件。提到分块存储image的特性,就要说一下linux的mount,它可以将两个具体路径映射成一个目录,合并包含两个具体路径下的内部文件。例如,mount -t aufs -o dirs="/tmp/a;/tmp/b" none /mnt。执行以后,原/tmp/a和/tmp/b中的内容都会出现在/mnt中。

在docker run一个image的时候,如果不加任何参数,则默认是在docker-hub(https://hub.docker.com/)去下载,这就如同maven,有一个public registry。同样的,如果我想给team建立一个局域网的“邮轮”,提高传输(上传下载,push和pull)的效率,就要自己创建一个registry服务端。 registry创建也非常简单,registry服务本身在docker hub中仍旧是以一个image的形式存在的,所以直接在服务器上docker run registry就ok了。 客户端container可以指定服务端的IP端口去pull image,也可以将本地的image tag成服务端的IP端口下的image,然后push到服务端去。

时间: 2024-08-25 14:29:54

认识大明星——轻量级容器docker知识树点亮的相关文章

轻量级容器Docker+微服务+RESTful API

[宗师]李锟(44035001) 10:23:03感觉Docker这样的轻量级容器+微服务+RESTful API三者可以形成一个铁三角.这也代表了PaaS未来的发展方向. [宗师]李锟(44035001) 10:47:07 轻量级容器+微服务+RESTful API,这是未来的一个很明显的技术发展趋势.越早投入,就越早收获.同学们记住这些话,都做个有心人.一般人我不告诉他. [宗师]李锟(44035001) 10:47:47学习不要只考虑能不能解决明天的吃法问题,那样做是没有出息的.

大型网站技术-3. 容器Docker与kubernetes

大型网站技术基石篇-容器Docker与kubernetes Docker和Kubernetes的关系就如Xen与OpenStack. Docker是一种容器技术,和Hypervisor(KVM/Xen这类)不同的是,Docker不会提供一整个操作系统,他能提供隔离的程序运行环境.对一个应用来说这已经够了. Kubernetes是Google的一个开源容器管理项目,他能利用Docker/其他技术部署/管理容器集群.   Docker          项目地址:https://www.docker

学习大数据要什么基础知识?学到什么程度才能从事大数据行业?

因为大数据前景好,薪资高,很多人想通过参加学习大数据,然后进入大数据行业发展.但是因为大数据的门槛较高,对于学习人员有一定的要求,那么学习大数据需要什么基础知识呢? 首先我们了解下对于大数据学习者本身的学历水平的要求 目前大多数的机构,对于大数据学习者要求必须是大专学历以上,而且大专学历还要求是计算机相关专业的,如果是本科及本科以上的,则对专业要求适当的放宽.同时大数据分为两大方向:大数据开发和大数据分析. 这两大方向的对于基础知识的要求不同,大数据分析偏向于分析,对于编程要求不高,相较而言对于

Docker知识

什么是docker Docker是一个开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现,提供一系列更强的功能,比如镜像. Dockerfile等; Docker理念是将应用及依赖包打包到一个可移植的容器中,可发布到任意Linux发行版Docker引擎上.使用沙箱机制运行程序, 程序之间相互隔离; Docker使用Go语言开发. docker架构和内部组建 Docker采用C/S架构(服务端与客户端,b/s浏览器和服务器),Dcoker daemon作为服务端接受

MySQL知识树-查询语句

在日常的web应用开发过程中,一定会涉及到数据库方面的操作,其中查询又是占绝大部分的.我们不仅要会写查询,最好能系统的学习下与查询相关的知识点,这篇文章我们就来一起看看MySQL查询知识相关的树是什么样的. MySQL查询知识树: 一.查询的种类 二.查询的原理 三.查询的应用场景 四.查询的效率比较 五.如何进行查询优化 六.与查询相关的知识扩展 一.查询的种类 MySQL的查询可以分为内连接查询.左连接查询.右连接查询.联合查询. ①内连接是通过关联表中共有的列来匹配出记录,查询出来的数据是

使用 SELinux 和 Smack 增强轻量级容器

http://www.bitscn.com/os/linux/200904/158771.html 安全 Linux 容器实现指南 轻量级容器 又称作 Virtual Private Servers (VPS) 或 Jails,它们是经常用于限制不可信应用程序或用户的工具.但是最近构造的轻量级容器没有提供充分的安全保证.使用 SELinux 或 Smack 策略增强这些容器之后,就可以在 Linux中实现更加安全的容器.本文介绍如何创建受 Linux 安全模块保护的更加安全的容器.SELinux

你不能混为一谈的思维导图和知识树

每一个分支的内容为总结或简化的课程资料内容.这与企业界的目标树有异曲同工的作用.类似的还有企业的组织结构图.都是这种形式的结构.基本来说,它的组织结构还是没有脱离大纲的方式.在进行知识资料的汇总时,对所学的知识进行学习和了解,当然也可以根据自己的知识树,进行学习计划或日程的安排.只是这方面的应用的案例很少. 关于思维导图和知识树的区别: 第一,他们对于知识的记录内容要求不同.知识树记录的为课程知识或是简化的内容,需要记录大量的文字信息.如果要对一本书作知识树,可以根据书的目录进行制作,然后再把相

虚拟机和容器docker

云计算中最主要的技术就是虚拟机,开源虚拟机已经kvm已经集成到Linux内核!针对虚拟机浪费资源(CPU.内存.存储等)较大的缺陷,google力推Docker容器和容器管理平台Kubernetes. KVM:就是Keyboard Video Mouse的缩写.KVM 交换机通过直接连接键盘.视频和鼠标 (KVM) 端口,让您能够访问和控制计算机.KVM 提供真正的主板级别访问,并支持多平台服务器和串行设备.(我在机房看到过...)百科 1)虚拟机 通过软件把一台计算机虚拟出好多台计算机,每台虚

docker知识全面讲解

说明:我无法使文档变得有趣,所以我只能尽力让它变得简洁和清晰,虽然你看着内容还是很多,但是只要你一步步的做下去,肯定会对docker有更深的了解.这篇文档主要是说明docker的使用,没有实际例子,下篇文档会以实例为主. 注:部分图片来自于网络,感谢分享的人. 志不坚者智不达!!! 1.docker介绍 1.1 虚拟机与容器的对比 上图所示,容器技术相较于VM少了客户机系统这一层:底层用到了linux的LXC的容器技术,所以docker目前只能运行于linux的64位系统之上(能运行32位系统也