容器vs.虚拟机:系统设计决定工具

在《容器vs.虚拟机:状态管理、网络和蔓延》中我们提到了应用Docker时可能会碰到的困难以及容器技术和虚拟机架构各自的优势与劣势。我们讨论了状态管理、网络和蔓延等广泛存在于IT行业的问题。虽然对于Docker来说解决这些问题的难度可能更大些,不过Docker与虚拟机相比也有着自己的优势。

当我们谈到虚拟机蔓延时所考虑的是资源管理上的问题。如果说的是关闭容器的话,Docker就有一个明显的优势-镜像的确定性。Docker容器我们可以清晰地查看镜像的历史和状态,所以要找出那些使用同一镜像的容器是非常方便的。

容器的替换也很容易。对于虚拟机我们需要管理磁盘快照、镜像和版本等等,但对Docker来说这些工作都可以轻松完成所以蔓延的风险并不是很大。

就网络功能来说虚拟机确实更加灵活,支持的配置和拓扑也更多。不过对Docker来说,如果容器在同一主机可以使用桥接网络,各个主机间也可以使用overlay网络。Docker还推出了一个将引擎聚合成swarm单元的功能来方便容器的管理,聚合成swarm单元的容器可以被视为同一个Docker引擎暴露给外界。从管理的角度来看这为Docker提供了某种程度的自主性,swarm和容器可以分开管理互不干涉。技术不管简单还是复杂,只要能解决问题就可以。

虚拟机挂起是一个很有用的功能,不过要是对比的话Docker可以用一种不同的流程来实现和虚拟机挂起类似的功能。Docker可以轻松地启动和关闭一个轻量级的环境,这一过程是完全自动的,而且可靠性很高,所以只要启用一个新的容器就好。如果比较的是服务的运行时间而不是某个机器的运行时间的话,Docker未必有明显的劣势。

一个服务器连续运行几年固然是给人印象很深的一个成绩,但对于无状态应用模型来说根本没必要。Docker启动关闭容器和生成镜像的便捷使得启用一个新的容器非常方便。机器运行的时间越长,出问题的机会也就越大。

在我们选择工具的时候有一个原则:系统设计决定工具而不是工具决定设计,所以在需要用容器的时候就应该大胆地用,不要被它不如虚拟机的地方束缚了。

时间: 2024-10-24 21:21:27

容器vs.虚拟机:系统设计决定工具的相关文章

关于容器、虚拟机以及 Docker 的一个入门教程

Yves yao · 2017-09-05翻译 · 1315阅读 原文链接 huangxiaolu审校 源地址:http://zcfy.cc/article/a-beginner-friendly-introduction-to-containers-vms-and-docker-4139.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io Source: https://flipboard.com/topic/

再谈容器与虚拟机的那点事

容器技术起源于虚拟化技术的发展,欣欣向荣的 Docker 着实是容器技术潮流中的一朵十分耀眼的浪花.在 Docker 诞生之初,它常常被放在虚拟机技术的对立面,甚至还有过 Docker 将替代虚拟机的夸大宣传,在许多集群以及虚拟化方案设计的讨论中,也总会将两者拿来比较一番利弊. 现如今 Docker 已经比较普及,这些曾经的传言不攻而破.容器以及 Docker 并没有替代虚拟机,而是与之十分和谐的共存,两者各自具有不同的特征和相应适合的应用场景.但脑洞大开的探索者们总想同时获得容器的便捷性和虚拟

dive 方便的观察容器各层信息的工具

dive 是一个方便的观察容器各层信息的工具,同时也集成了容器构建命令,方便我们在构建容器 镜像的同时查询镜像各层的变动信息 安装 mac 系统,可以按照自己的系统选择安装方式 wget https://github.com/wagoodman/dive/releases/download/v0.6.0/dive_0.6.0_darwin_amd64.tar.gz 解压,并配置系统环境变量 使用 包含的命令 dive --help This tool provides a way to disc

jps:虚拟机进程状况工具

jps(JVM Process Status Tool) jdk提供的jps很像UNIX的ps命令,可以列出正在运行的虚拟机进程,并显示虚拟机执行的主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID).虽然功能比较单一,但是他是使用频率最高的JDK命令工具,因为其他的工具大多需要输入它查询到的LVMID来确定要监控的是哪一个虚拟机进程.对于本地虚拟机进程来说,LVMID与操作系统

docker容器和虚拟机的比较

containers:容器是在应用层的抽象化,多个容器能够运行在同一台机器上,和其他容器共享操作系统的核,每个容器运行都独立的运行在用户的空间内.容器需要的空间比虚拟机要小(容器镜像的大小一般为MBs级别的),容器能够处理更多的应用程序,并且需要更少的资源. virtual machines:虚拟机是物理硬件层的抽象化,让一个服务器转变成多个服务器.管理程序允许多个虚拟机运行在同一台机器上.每个虚拟机都包括操作系统,应用程序,必要的二字节文件和库(虚拟机的大小一般为GBs级别),虚拟机的启动也比

VMTurbo:应对散乱虚拟机的强劲工具

随着服务器虚拟化技术越来越成熟,虚拟机散乱(VM sprawl)和主机资源管理成为了虚拟化数据中心的管理员眼里的两大问题.面对这种情形,一种可行的解决办法就是使用一款名为VMTurbo(vmturbo.com)的产品,该产品本来就是为了帮助虚拟化管理而设计的. 对VMTurbo来说,安装过程其实并不太复杂.可以把它作为VMware的虚拟设备或Hyper-V的虚拟设备来下载.如果你选择了VMware虚拟设备,就必须安装vCenter.为了撰写本文,我选择了使用Hyper-V虚拟设备. 我对VMTu

Docker容器学习梳理--web管理工具(1)

DockerUI优点:1)支持container批量操作:2)支持image管理(虽然比较薄弱) DockerUI缺点:不支持多主机. 下面记录在DockerUI管理环境的部署过程:1)首先拉去dockerUI镜像如下:[[email protected] ~]# docker pull uifd/ui-for-docker //之前镜像位置为dockerui/dockerui [[email protected] ~]# docker imagesREPOSITORY TAG IMAGE ID

Kubernetes容器集群kubectl管理工具命令(八)

创建一个应用 [[email protected] ~]# kubectl run nginx --replicas=3 --labels="app=nginx-example" --image=nginx:1.10 --port=80 replicas:副本数为3个,默认1个 labels :标识识别属性, image:默认从hub上下载 查看应用 [[email protected] ~]# kubectl get all NAME READY STATUS RESTARTS AG

容器时代的持续交付工具---Drone:Drone介绍与安装

Drone:Drone is a Container-Native, Continuous Delivery Platform. 官方给的定义,从上面的定义可以得出两个关键点: 1,Container-Native:Cloud-Native是云原生,那Container-Native可以翻译成容器原生,就是说Drone是容器时代的一个产品,是基于容器实现的. 2, Continuous Delivery:持续交付,容器是现在快速交付的一个代名词,而Drone是容器化的一种持续交付的平台,其实Dr