为了账号安全,请及时绑定邮箱和手机立即绑定

请教一下,docker和容器的区别?

/ 猿问

请教一下,docker和容器的区别?

DIEA 2019-11-12 14:10:45

docker和容器的区别?


查看完整描述

3 回答

?
侃侃尔雅

Docker 是属于容器服务的一种,是一个开源的应用容器引擎。
传统的容器技术没有成为主流的原因,是因为其未能提供标准化的应用运行时环境,而以Docker为代表的新一代容器技术,从一开始就以提供标准化的运行时环境为目标,真正做到“build once, run anywhere”(一次建立,到处运行)。
docker容器可以将同一个构建版本用于开发、测试、预发布、生产等任何环境,并且做到了与底层操作系统的解耦。在此基础上,还进一步发展出了CaaS(容器即服务)技术。将 Docker 比喻为代码方面的集装箱运输系统,确实非常形象恰当。
Docker将任何类型的应用和它的依赖打包成为一个标准的、轻量级的、便携的、独立的集装箱,让各类应用都支持一套标准的运作模式,只要安装了Docker程序的服务器都可以运行。
开发者开发和测试完成的Docker容器,可以无差别的运行在测试环境、生产环境,无论服务器是物理机、虚拟机,或者是以上各种类型服务器的组合。应用开发过程只需执行一次,即可保证应用在任何环境上运行的一致性。对于运维人员,则只需要配置一次不同环境的服务器,即可运行任何Docker容器。
当容器和服务器的数量达到一定规模的时候,就会碰到管理的问题,即如何有效管理大量的服务器和容器,保证应用的稳定运行、方便升级和故障的快速解决。
容器编排工具提供图形化界面或者命令行来管理容器和服务器集群,提供容器配置、任务发布、服务发现、负载均衡、系统监控和故障恢复、声明式系统配置以及有关容器部署和性能的规则和约束定义机制等。
Google开发的Kubernetes从众多编排工具中脱颖而出。相比Kubernetes,Docker原生编排工具Swarm在集群搭建和使用上要相对简单一些,学习和部署成本相对低一些。较新版本的Docker已经集成了Swarm。Swarm支持跨多个主机进行编排,管理较小规模的容器集群也绰绰有余,对于初学者也可以很快的部署和运行。

查看完整回答
反对 回复 2019-11-24
?
浮云间

docker centos 和 ubuntu 镜像的区别Docker是基于镜像的。镜像类似于已经包含了文件、配置和安装好的程序的虚拟机镜像。同样的,你可以像启动虚拟机一样启动多个镜像实例。运行中的镜像称为容器。你可以修改容器(比如删除一个文件),但这些修改不会影响到镜像。不过,你使用docke...

查看完整回答
反对 回复 2019-11-24
?
慕前端131612

IBM研究部门发表了一篇关于容器和虚拟机环境性能比较的论文。这篇论文使用了Docker和KVM作为研究对象,阐述了Docker使用NAT或AUFS时的开销,并且质疑了在虚拟机上运行容器的实践方法。 论文作者在原生、容器和虚拟化环境中运行了CPU、内存、网络和I/O的benchmark。其中,分别使用KVM和Docker作为虚拟化和容器技术的代表。Benchmark也包含了对不同环境下Redis和MySQL负载的采样。通过小数据包和多客户端,Redis侧重于网络栈的性能。而MySQL侧重于内存,网络和文件系统的性能。 结果显示,在每一项测试中,Docker的性能等同于或超出KVM的性能。在CPU和内存性能方面,KVM和Docker都引入了明显的,但可略不计的开销。但是,对于I/O密集型的应用,两者都需要进行调整以减少开销带来的影响。 当使用AUFS存储文件时,Docker的性能会降低。而相比之下,使用卷(volume)能够获得更好的性能。卷是一种专门设计的目录,存在于一个或多个容器内。通过这种目录能够绕过联合文件系统(union file system)。这样它就没有了存储后端可能带来的开销。默认的AUFS后端会引起显著的I/O开销,特别是当有多层目录深度嵌套的时候。 Docker的默认网络选项,--net=bridge,由于NAT会重写数据包,也引入了性能开销。当数据包收发率变高时,这种开销会变得很明显。可以通过使用--net=host改善网络的性能。这个选项告诉Docker不要为容器创建一个独立的网络栈,并允许容器拥有宿主机网络接口的完全访问权限。但是,使用这个选项时要小心。因为它允许容器内的进程像其他根进程一样,使用数值较小的端口;并允许容器内的进程访问本地网络服务,如D-bus。这使得容器内的进程可以做一些预料之外的事情,如重启宿主机。 尽管自诞生以来,KVM性能有了相当大的提升,但它仍然不适用于对延时敏感或高I/O访问率的工作负载。因为每次I/O操作,它都会增加一些开销。这个开销对于耗时较少的I/O操作是有意义的,但对于耗时较长的I/O操作是可以忽略的。 根据这些测试结果,论文对使用虚拟机实现IaaS的方法提出了质疑: 传统观点(在某种程度上,这种观点存在于年轻的云生态圈中)认为使用虚拟机实现IaaS,使用容器实现PaaS。我们没有找到技术方面的理由来证明必须这么做,尤其是证明容器基于IaaS能提供更好的性能或者更容易部署。由于容器提供了控制手段,并在不使用虚拟机的情况下能达到物理机的性能,所以它能够消除IaaS和非虚拟化的服务器间的差异。 尽管在虚拟环境中运行容器是一种常见的实践方法,但是论文建议直接在物理的Linux服务器上运行它们。否则,相比于直接运行在非虚拟化的Linux上的方法,由于虚拟机的性能开销,这种实践方法不会得到任何额外的好处。

查看完整回答
反对 回复 2019-11-24
  • 3 回答
  • 0 关注
  • 84 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信