Docker容器与虚拟机有什么区别
概述:
Docker是⼀个虚拟环境容器,可以将你的可执⾏⽂件、配置⽂件及⼀切其他你需要的⽂件⼀并打包到这个容器中,并发布和应⽤到任意平台。⽐如,你在本地⽤Python开发了⼀个⽹站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx 等打包到⼀个容器中,然后部署到任意你想部署到的环境。
Docker解决的主要问题
有过后台开发经验的同学,⼀定遇到过下⾯这些问题:
程序在开发环境跑得好好的,但是部署到⽣产环境,却状况频出;
假设某个程序要在客户的环境上进⾏部署,虽然在⾃⼰的环境上部署、验证成功,但始终担⼼客户的环境上缺少某些必要的库⽂件,或者某些⽂件的版本不符合要求;
那么,有了docker,这些问题都将不复存在。
什么是Docker
Docker是⼀个虚拟环境容器,可以将你的可执⾏⽂件、配置⽂件及⼀切其他你需要的⽂件⼀并打包到这个容器中,并发布和应⽤到任意平台。⽐如,你在本地⽤Python开发了⼀个⽹站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx 等打包到⼀个容器中,然后部署到任意你想部署到的环境。
如果不好理解,我们再拿集装箱打个⽐⽅。
集装箱解决了什么问题呢?在⼀艘⼤船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送⽔果的船和专门运送化学品的船了。只要这些货物在集装箱⾥封装的好好的,那我就可以⽤⼀艘⼤船把他们都运⾛。
docker也是类似的理念。我们可以在⼀台机器上跑多个互相毫⽆关联的docker容器,每⼀个容器就相当于⼀个集装箱。
Docker⾥的⼏个基本概念
镜像
镜像可以理解为⼀堆静态的⽂件
容器
容器则是镜像run起来之后的⼀个实例。镜像之于容器就好⽐⾯向对象编程⾥的class之于object。
仓库
镜像需要地⽅保存,这个地⽅就是仓库
与传统虚拟化的区别
这⾥我们顺便讲⼀下传统虚拟化。
我们看到,传统虚拟化是站在硬件物理资源的基础上,虚拟出多个OS,然后在OS的基础上构建相对独⽴的程序运⾏环境,⽽Dokcer则是在OS的基础上进⾏虚拟,显然Dokcer轻量得多,因此其资源占⽤、性能消耗相⽐传统虚拟化都有很⼤优势。docker进入容器
虚拟化与docker的区别
docker设计⼩巧,部署迁移快速,运⾏⾼效,应⽤之间相互独⽴,管理⼈员可以看到所有容器的内容,虚拟化技术⽐较臃肿,不论什么应⽤都需要先创建新的系统,并且并⾮按照应⽤隔离,⽽是按照系统隔离,管理员⽆法看到系统内部信息。
举个例⼦,Docker就是⼿机中的各种APP,只需要⼀个系统就可以下载⾃⼰所需的应⽤,但是虚拟化技术相当于你的苹果⼿机安装⼀个庞⼤软件,这个软件上安装安卓系统、魅族系统等,每个系统上还要安装各类应⽤,⽐较⿇烦。
但两者没有绝对的好坏,主要还是看应⽤场景,根据不同的需求选择不同的解决⽅案即可
虚拟机和docker区别:
1.资源:vmwre是系统级对整个系统硬件分割,docker是进程级占⽤资源少
2.启动:vmwre启动需要⼏分钟,docker是秒级
3.部署速度:docker⽐vmwre快很多
4.移植性⽅⾯:Docker容器轻便、灵活、适应于Linux,⽽虚拟机相对笨重,与虚拟化技术的耦合度⾮常⾼,因此移植性相对较差。docker相当于vmwre,镜像相当于虚拟机的镜像盘,实际运⾏的虚拟机相当于docker的容器
为什么使⽤Docker?
优点:
⼀致的运⾏环境
更快启动速度
隔离性
弹性伸缩、快速扩展
迁移⽅便
持续交付和部署
开发⼈员和运维⼈员职责分离
缺点:
安全性不如虚拟机
隔离性不如虚拟机
⼤规模不易管理
排查问题困难
不⽀持Windows
#——————————————docker作⽤/⽤途/⽤于场景——————————————————————————————————————————————
1)测试:Docker 很适合⽤于测试发布,将 Docker 封装后bai可以直接du提供给测试⼈员进⾏运⾏,不再需要测试⼈员与运维、开发进⾏配合,进⾏环境搭建与部署。
2)测试数据分离:在测试中,经常由于测试场景变换,需要修改依赖的数据库数据或者清空变动 memcache、Redis 中的缓存数据。Docker 相较于传统的虚拟机,更轻量与⽅便。可以很容易的将这些数据分离到不同的镜像中,根据不同需要随时进⾏切换。
3)开发:开发⼈员共同使⽤同⼀个 Docker 镜像,同时修改的源代码都被挂载到本地磁盘。不再因为环境的不同⽽造成的不同程序⾏为⽽伤透脑筋,同时新⼈到岗时也能迅速建⽴开发、编译环境。
4)快速部署:Docker通过创建流程的容器,不必重新启动操作系统,⼏秒内能关闭,你可以在数据中⼼创建或销毁资源,不⽤担⼼额外消耗。典型的数据中⼼利⽤率是30%,通过更积极的资源分配,以低成本⽅式对⼀个新的实例实现⼀个更聚合的资源分配,我们很容易超过这个利⽤率,⼤⼤提⾼数
据中⼼的利⽤效率。
5)应⽤隔离:有很多理由你需要在⼀台机器上运⾏多个应⽤,这就需要将原来铁板⼀块monolithic的应⽤切分为很多微服务。实现应⽤之间的解耦,将多个应⽤服务部署在多个Docker中能轻松达到这个⽬的。
6)持续集成:Docker可以快速创建和撤销容器,在持续集成的环境中,可以频繁和快速地进⾏部署和验证⼯作。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论