docker容器与虚拟机有什么区别?

由于Docker基础镜像和Docker引擎会持续更新,Packer和Vagrant自动重建基本虚拟机就简单多了,不再需要执行那些手工操作的步骤。如果这篇文章对你有用,请分享给朋友和同事。如果你有问题或更好的建议,请留下评论...

Docker虚拟机之间的关键差异原来是它

是什么让Docker容器如此受欢迎?在某些情况下甚至比虚拟机更有魅力?答案就是密度。为什么这么说?它怎会如此重要?在计算的背景下,密度指的是单个物理服务器...以及Docker虚拟机之间的关键区别。本文转自d1net(转载)

虚拟机Docker有何不同?

虚拟机Docker究竟有何不同呢?为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。首先,大家需要明确一点,Docker容器 不是 虚拟机。2014年,当我第一次接触Docker的时候,我...

Docker未曾想过取代虚拟机

说:“实际上,在大多数情况下Docker被部署在虚拟机上运行。容器取代虚拟机的言论肯定不是我们所倡导的。Docker容器的核心价值是应用百分之百的可移植性…而不是更高的硬件密度。容器如何安身立命 将容器用作整合...

这个虚拟机实例挂载了一个可以从包含Boot2Docker(B2D)引导的镜像文件。就其本身而言,B2D是一个可以在几秒钟启动,关注Docker Daemon运行状况,占用少量资源的超轻量级Linux ISO。这可以让你利用很少的资源,通过...

有些人会将容器视为虚拟机,他们中的大部分人认为,应该在现有的运行容器中部署应用。在开发阶段,因为需要不断地修改配置并调试应用,这样做无可厚非。但是,当持续交付管道行进至 QA 与生产阶段时,不应该把镜像和...

Docker,你不能错过这些

更细粒度的资源管理可以提高资源利用率,从物理机到虚拟机再到容器,资源的粒度在不断细化。一台VM上启动多个容器能更充分的利用VM的资源,配合云服务和自动调度等手段,可以进一步提供资源利用率和降低资源成本。...

Machine便不是宿主机,而是虚拟机,你可以通过执行&boot2docker ip&指令查看虚拟机的IP地址。现在我们可以通过要求测试值作为返回的JSON数据,从而确认rest服务器是否运行:

不能简单说容器虚拟化比传统虚拟机

比如说容器技术如何如何虚拟机强。但是在笔者看来,这些说法值得商榷,毕竟容器技术不是新事物,在Linux上很早就出现了这种虚拟化技术。只不是借助云计算的发展,Docker为代表的容器技术开始疯狂成长。所谓容器...

本文讲的是使用Docker生成SSL证书【编者的话】学习如何使用Docker生成SSL证书,而不是在主机上生成。当听到“Docker”和“SSL”这两个词的时候,你很可能会认为是在说创建SSL证书来保护Docker daemon本身。这很重要...

不是虚拟化引擎 Docker 第一次发布的时候,很多人都拿 Docker虚拟机 VMware、KVM 和 VirtualBox 比较。尽管从功能上看,Docker 和虚拟化技术致力于解决的问题都差不多,但是 Docker 却是采取了另一种非常不同的...

Docker技术入门与实战》——第1章 初识Docker

本节书摘来自华章计算机《Docker技术入门与实战》一书中的第1章,作者:杨保华,戴王剑,曹亚仑著,更多章节内容可以访问云栖社区“华章计算机”公众号查看。...最后,还将阐述Docker在整个虚拟化领域中的定位。

和Java虚拟机类似,Docker使用容器引擎解决平台依赖问题,它在每台宿主机上都启动一个Docker的守护进程,守护进程屏蔽了与具体平台相关的信息,对上层应用提供统一的接口。这样,Docker化的应用,就可以在多个平台下...

这篇博文是博主在公司内推进docker+k8s落地时的部分内容。目的是为了让公司内的开发不管有没有接触过docker这个技术,都能准确的了解docker是什么,怎么打出符合自己项目需要docker镜像,最终交付给容器环境运行。

今天分享的内容主要以实际改造为主,剖开docker的神秘面纱,力求让大家都知道docker是什么,怎么打dcoker镜像,docker这块是开发必须要了解的,以后我们的交付物不是jar,也不是war,而是可以运行在各种容器化平台(k8s,swarm,mesos,OpenShift等)的docker镜像。

k8s这块已经偏运维了,运维需要掌握k8s中的诸多概念,以后运维就不是运维ECS主机了,直接运维k8s。然后分别以spring boot和tomcat两个类型的不同应用为例。讲下具体的改造方案,以及我们在这个期间解决的一些问题和改造需要注意的细节

虚拟机属于完全虚拟化,即模拟完整的底层硬件环境特权指令的执行,客户操作系统无需进行修改。比如我们常用的VirtualBox,VMWare Workstation和Parallels Desktop等虚拟化软件。

Docker和其它容器技术便是操作系统级虚拟化,即直接通过内核创建虚拟的操作系统实例(内核和库),来隔离不同的进程和资源。

大白话:什么是镜像(image)?

在docker没有出现流行前,一般提到镜像,都是Windows等系统镜像,其实docker镜像和Windows等系统镜像在概念上是一样的,都是将一个完整的可运行的系统打包下,方便下次运行时包含所有环境,不需要安装各种依赖了。

java的docker镜像中一般都有一个最基础的镜像+jre环境,最基础的系统运行环境,大概4M左右。然后我们需要将我们的spring boot应用copy进去,重新打包镜像。那么新的镜像就是包含了我们的应用的所有的依赖了。

这个过程相当于,将我们uat环境的ECS主机copy一份镜像一样,但是这个体积有很大的区别。最终我们打完的docker镜像大小=基础系统(4M左右)+java(80M左右)+应用(100M左右)

以上就是docker镜像与传统vm区别及分析的详细内容,更多关于docker镜像与vm区别的资料请关注脚本之家其它相关文章!

多年前的一个晚上,风雨交加,一个叫Docker的年轻人来到Linux帝国见帝国长老。

“Linux的长老,天下的程序员苦于引进APP。 我要改变这个现状。 我希望长老能帮助我。”

长老回答说。 “啊,年轻的年纪,口气不小。 请先入席。 你在追求什么? 我想问一下那个的详细情况。”

Docker坐下开始侃侃而谈。 “今天,APP开发、测试、部署、对各种库的依赖很复杂,也有版本间的差异,开发环境正常工作,但一旦进入测试环境和在线环境,经常会出现问题,程序员们在改变这种情况时”

Docker回头看着长老说。 “我想做一个虚拟容器,让APP们运行,把它们需要的整个依赖环境打包,移植到不同的机器后也提供一致的运行环境,让程序员们完全解脱! ”

Linux的长老听了之后,点了点头。 “年轻人的想法很好,但听你的解释,似乎虚拟机可以解决这个问题。 将APP和依赖的环境部署到虚拟机上,拍摄快照,然后直接部署虚拟机,不是很好吗? ”

Docker连连摇头说。 “长老们什么都不知道。 虚拟机就像牛一样又重又大,很快就是g单位的大小。 其中必须运行完整的操作系统,所以跑起来很辛苦。 慢当然,非常占用资源。 如果一台机器不能运行好几台虚拟机,性能就会受损。 而且,我想做一个轻量级的虚拟集装箱。 提供一个运行环境,即使不运行一个操作系统,所有容器中的系统核心也与外部主机共享。 这样的话,可以批量复制很多集装箱,又轻又快。”

Linux长老站起来,来回走了好几次,想了一会儿后,突然敲了一下桌子,大声说。 “好主意。 这个项目是我扔的! ”

Docker目光炯炯,欣喜若狂。 “这真的离不开长老的帮助。 为了实现我所说的目标,过程的管理隔离是非常重要的。 我期待着长老能帮助我! ”

“请稍等”,Linux长老转身回到室内。 过了一会儿出来了,手上拿着什么东西。

“年轻人,回去后,即使放弃大工作,我也会给你三个锦囊。 如果遇到难题,依次分解,一定会有很大的作用。”

Docker高兴地接过三个锦囊,和Linux的长老告别后,在雨中回去了。

长老的鼓励下,Docker充满了干劲,准备马上开始他的项目。

作为容器,最重要的是限制容器中进程的活动范围——可以访问的文件系统目录。 不能随便容器里的过程

访问真实的系统目录,得将他们的活动范围划定到一个指定的区域,不得越雷池半步!

到底该如何限制这些进程的活动区域呢?Docker遇到了第一个难题。

苦思良久未果,Docker终于忍不住拆开了Linux长老送给自己的第一个锦囊,只见上面写了两个函数的名字:chroot & pivot_root。

Docker从未使用过这两个函数,于是在Linux帝国四处打听它们的作用。后来得知,通过这两个函数,可以修改进程和系统的根目录到一个新的位置。Docker大喜,长老真是诚不欺我!

有了这两个函数,Docker开始想办法怎么来“伪造”一个文件系统来欺骗容器中的进程。

为了不露出破绽,Docker很聪明,用操作系统镜像文件挂载到容器进程的根目录下,变成容器的rootfs,和真实系统目录一模一样,足可以以假乱真:

文件系统的问题总算解决了,但是Docker不敢懈怠,因为在他心里,还有一个大问题一直困扰着他,那就是如何把真实系统所在的世界隐藏起来,别让容器中的进程看到。

比如进程列表、网络设备、用户列表这些,是决不能让容器中的进程知道的,得让他们看到的世界是一个干净如新的系统。

Docker心里清楚,自己虽然叫容器,但这只是表面现象,容器内的进程其实和自己一样,都是运行在宿主操作系统上面的一个个进程,想要遮住这些进程的眼睛,瞒天过海,实在不是什么容易的事情。

Docker想过用HOOK的方式,欺骗进程,但实施起来工作太过复杂,兼容性差,稳定性也得不到保障,思来想去也没想到什么好的主意。

正在一筹莫展之际,Docker又想起了Linux长老送给自己的锦囊,他赶紧拿了出来,打开了第二个锦囊,只见上面写着:namespace。

Docker还是不解其中之意,于是又在Linux帝国到处打听什么是namespace。

经过一阵琢磨,Docker总算是明白了,原来这个namespace是帝国提供的一种机制,通过它可以划定一个个的命名空间,然后把进程划分到这些命名空间中。

而每个命名空间都是独立存在的,命名空间里面的进程都无法看到空间之外的进程、用户、网络等等信息。

这不正是Docker想要的吗?真是踏破铁鞋无觅处,得来全不费功夫!

Docker赶紧加班加点,用上了这个namespace,将进程的“视野”锁定在容器规定的范围内,如此一来,容器内的进程彷佛被施上了障眼法,再也看不到外面的世界。

文件系统和进程隔离的问题都解决了,Docker心里的石头总算是放下了。心里着急着想测试自己的容器,可又好奇这最后一个锦囊写的是什么,于是打开了第三个锦囊,只见上面写着:CGroup。

这又是什么东西?Docker仍然看不懂,不过这一次管不了那么许多了,先运行起来再说。

试着运行了一段时间,一切都在Docker的计划之中,容器中的进程都能正常的运行,都被他构建的虚拟文件系统和隔离出来的系统环境给欺骗了,Docker高兴坏了!

很快,Docker就开始在Linux帝国推广自己的容器技术,结果大受欢迎,收获了无数粉丝,连nginx、redis等一众大佬都纷纷入驻。

然而,鲜花与掌声的背后,Docker却不知道自己即将大难临头。

这天,Linux帝国内存管理部的人扣下了Docker准备“处决”掉他,Docker一脸诧异的问到,“到底发生了什么事,为什么要对我下手?”

管理人员懵懂的大炮说到:“帝国管理的内存快被一个叫Redis的家伙用光了,现在要挑选一些进程来杀掉,不好意思,你中奖了”

Redis?这家伙不是我容器里的进程吗?Docker心中一惊!

“两位大人,我认识帝国的长老,麻烦通融通融,找别人去吧,Redis那家伙,我有办法收拾他”

没想到他还认识帝国长老,管理人员犹豫了一下,就放了Docker到别处去了。

惊魂未定的Docker,思来想去,如果不对容器中的进程加以管束,那简直太危险了!除了内存,还有CPU、硬盘、网络等等资源,如果某个容器进程霸占着CPU不放手,又或者某个容器进程疯狂写硬盘,那迟早得连累到自己身上。看来必须得对这些进程进行管控,防止他们干出出格的事来。

这时候,他想起了Linux长老的第三个锦囊:CGroup!说不定能解这燃眉之急。

经过一番研究,Docker如获至宝,原来这CGroup和namespace类似,也是Linux帝国的一套机制,通过它可以划定一个个的分组,然后限制每个分组能够使用的资源,比如内存的上限值、CPU的使用率、硬盘空间总量等等。系统内核会自动检查和限制这些分组中的进程资源使用量。

Linux长老这三个锦囊简直太贴心了,一个比一个有用,Docker内心充满了感激。

随后,Docker加上了CGroup技术,加强了对容器中的进程管控,这才松了一口气。

在Linux长老三个锦囊妙计的加持下,Docker可谓风光一时,成为了Linux帝国的大名人。

然而,能力越大,责任越大,让Docker没想到的是,新的挑战还在后面。

我要回帖

更多关于 docker安装在虚拟机上 的文章

 

随机推荐