Docker的基础理论与关键点是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
一般来说,虚拟化既可以通过硬件模拟来实现,例如 Vmware、KVM等,主要是通过虚拟硬件的方式,重新创建一个操作系统,操作系统本身并不知道当前的硬件是否真的存在,这种形式又称为操作系统级虚拟化。
而现在以Docker为代表的容积技术,为虚拟化技术提供了创新和突破。
Docker 是使用容器技术实现应用虚拟化的一个开源项目。
它与传统的虚拟机技术有本质的区别,虚拟机技术虚拟出来的单个虚拟机可以部署各种应用,本质来说就是多了一台可迁移的操作系统;而Docker是一个轻量级容器,主要是针对应用进行定制,一个Docker容器封装一个应用,提供了这个应用运行的环境,所以被称为“应用的集装箱”,这样细粒度更高。
Docker是基于操作系统的软件,他利用了操作系统已有的特性,可以实现远超传统虚拟机的轻量级虚拟化,主要有如下几点:
1、更快的交付和部署,开发人员可以通过镜像快速构建开发环境,测试人员可以通过完全相同的环境来进行测试,通过Docker部署也会变的简单高效。
2、更高效的资源利用,Docker本身对资源的消耗极低,这方面的性能传统虚拟机是无法比拟的,这样一台服务器可以构建更多的Docker应用。
3、更轻松的扩展和迁移,Docker几乎可以在任何平台上运行。
4、更简单的更新管理,通过Dockerfile,可以通过简单的修改可以实现以往大量的更新工作。
使用Docker所有的时间基本都是在处理它的三大核心要素:镜像、容器、仓库。
镜像 是一个只读模版,是对容器的定义,就像Java 中 的类一样,通过类可以创建实例,实例就是容器,容器则是我们真正运行起来提供服务的应用,通过提交容器可以形成新的镜像,迁移镜像又可以在其他服务器生成容器。
仓库是指存放镜像的地方,目前Docker的仓库(Docker Hub)中存放了非常多的基础镜像文件,我们可以直接下载作为应用的基础模版。
当然我们也可以搭建我们的私人仓库,在内部网络内共享我们的镜像。
Docker 是诞生于 Linux的一种容器化虚拟化技术,深度运用了Linux操作系统的多向底层支持技术,通过这些技术来实现 Docker 的容器级虚拟化。
命名空间(Namespace)是Linux内核的一个强大特性,利用这一特性每个容器都拥有自己独立的命名空间,运行在其中的应用就像在独立的操作系统环境中一样,容器之间资源独立、互不影响。
这种资源隔离特性隔离了主机名与域名、进程编号、内存、网络设备、文件系统、用户和用户组,虽然所有的容器都通过操作系统共享了主机的硬件资源,但是通过Namespace实现了基于操作系统级别的资源隔离,这种形式效率很高。
控制组(Control Group)也是Linux内核的一个特性、主要对共享资源进行隔离、限制。Docker通过控制分配到容器的资源,实现了避免多个容器同事运行是对宿主机系统的资源竞争。
控制组主要提供了如下功能:
资源限制,可以将组设置为不超过设定的内存限制。
优先级,设置优先级可以让一些组优先得到更多的CPU资源。
资源审计,对每个组分配的资源进行统计。
隔离,是一个组不能看到另一个组的资源(包括进程,网络连接和文件系统)。
控制,控制挂起,重新启动等操作。
联合文件系统是Linux一种高性能分层文件系统,目前有多种实现技术方案,它具有两个基本特性:
每一次修改作为一次提交,并层层叠加
将不同的目录挂在到同一个虚拟文件系统下
联合文件系统是Docker实现的基础技术,Docker镜像可以通过分层来继承,例如 用户基于基础镜像制作各种不同的应用镜像,这些镜像通用了一个基础镜像,这些应用只用记录这些分层信息,从而大大提升了存储效率。
我们可以通过 docker history 命令查看一个镜像的分层组成。
将不同的目录挂在到同一个虚拟文件系统下,这样就实现了外置数据卷的挂载。
对于Docker镜像来说构成镜像的这些层是不可修改的,只读的,当Docker利用镜像启动一个容器时,将在镜像文件系统的最顶端挂载一个新的可读写层给容器,容器中内容的更新会发生在可读写层。当所操作的对象位于较深的层时,需要先复制到最上面的可读写层,当数据对象较大时,IO性能会较差,所以一般通过数据卷挂载的方式,而不是直接修改镜像内的数据就是这个原因。
看完上述内容,你们掌握Docker的基础理论与关键点是怎么样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。