静网PWA视频评论

可以用docker代替虚拟机,运行生产服务器吗?

2023年10月08日

- txt下载

专业回答


正面回答这个问题之前,先看看虚拟机和Dcoker的区别。

  • 虚拟机:在一台物理机器上,利用虚拟化技术,虚拟出来多个操作系统,每个操作系统之间是隔离的。举例说明:电脑上安装操作系统,比如我们安装了win10的操作系统;再往上安装虚拟机软件,比如我们常用的VirtualBox、VMWare,它们的作用是模拟计算机硬件;这样虚拟机模拟出来的操作系统了;在虚拟的操作系统中,安装所需的软件、组件等。比如我们在虚拟操作系统中安装JDK、Tomcat等;最后就是具体的应用了,也就是把应用部署到Tomcat中。
  • Docker:官方解释是开源的应用容器引擎。用人话解释一下:依然需要现在电脑上安装操作系统, 然后安装Docker容器的管理器,到了这一步,不需要自己安装JDK和Tomcat,而是由开发人员将素有的依赖和应用都被打包成了Docker镜像。例如,JDK、Tomcat、应用都被打包在了一起,运行在Docker容器里,容器和容器间是隔离的。

总结一下虚拟机和Docker的区别:

  • 从两者的架构图上看,虚拟机是在硬件级别进行虚拟化,模拟硬件搭建操作系统;而Docker是在操作系统的层面虚拟化,复用操作系统,运行Docker容器。

  • Docker的速度很快,秒级,而虚拟机的速度通常要按分钟计算。

  • Docker所用的资源更少,性能更高。同样一个物理机器,Docker运行的镜像数量远多于虚拟机的数量。

  • 虚拟机实现了操作系统之间的隔离,Docker算是进程之间的隔离,虚拟机隔离级别更高、安全性方面也更强。

再正面回答一下“Docker可以代替虚拟机运行生产服务器么”?
  • Docker是可以用于生产环境的;但是Docker是有学习成本的,前期要踩不少的坑;
  • 如果没有容器集群管理工具的话,只用Docker的话,没有太大必要(人肉维护?开发和运维都会死的);
  • 虚拟机和Docker各有优势,很多企业都采用物理机上做虚拟机,虚拟机中跑Docker的方式。
  • 总之,要说Docker代替虚拟机还为时过早,至少短期内不会;

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。


其他回答1


首先,大家需要明确一点,Docker容器不是虚拟机。
正面回答这个问题之前,先看看虚拟机和Dcoker的区别。虚拟机:在一台物理机器上,利用虚拟化技术,虚拟出来多个操作系统,每个操作系统之间是隔离的。举例说明:电脑上安装操作系统,比如我们安装了win10的操作系统;再往上安装虚拟机软件,比如我们常用的VirtualBox、VMWare,它们的作用是模拟计算机...
Docker容器虚拟化的好处 Docker项目的发起人和Docker Inc.的CTO Solomon Hykes认为,Docker在正确的地点、正确的时间顺应了正确的趋势—即高效地构建应用。现在开发者需要能方便地创建运行在云平台上的应用,也就是说应用必须能够脱离底层机器,而且同时必须是“任何时间任何地点”可获取的。...
使用 虚拟机 运行多个相互隔离的应用时,如下图: 从下到上理解上图: 基础...因此,我们需要根据不同的应用场景和需求采用不同的方式使用Docker技术或使用服务器虚拟化技术。...使用 虚拟机 运行多个相互隔离的应用时,如下图: 从下到上理解上图: 基础因此,我们需要根据不同的应用场景和需求采用不同的方式使用Docker技术或使用服务器虚拟化技术。
每日分享科技领域相关内容,有缘相遇,期待关注。在IT行业从业多年,也算从看着时代从物理服务器走向虚拟化云计算时代,又准备进入Docker时代,作为下一代虚拟化技术,Docker正改变着整个行业开发、测试、部署应用的方式,至于虚拟化技术和docker技术到底有什么不同,下面来分析一下。01 什么是虚拟化...我们单位最近在推docker,已经在开发测试环境使用(稍显落后),下面我就谈谈自己的Docker的理解,以及Docker和虚拟机的区别。虚拟机先说说什么是虚拟机:在一台物理机器上
有幸经历传统企业的互联网化转型过程,从一参加工作开始跟着领导做去IOE化,大规模引入开源中间件,在此环境中,Docker进入我们的视野,在测试环境中开始手动部署Docker。由于公司的资源有限,我们的Docker部署采用三层体系,即物理机之上部署虚拟机,然后虚拟机中部署Docker,每个Docker执行只部署...使用 Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如 何管理容器。Docker 设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署 的
大家好,我是小枣君。这个问题,我从头给你梳理一下吧: “云计算”这个词,相信大家都非常熟悉了。作为IT行业的热门技术,它频繁出现在各大媒体的新闻报道中。BAT这样的互联网企业,也经常把它挂在嘴边。相信很多人都想学习云计算,跟上技术潮流。如果对云计算有一定了解的话,应该会或多或少地听到...虚拟机运行在hypervisor之上。第二类,物理机上安装正常的操作系统(例如Linux或Windows),然后在正常操作系统上安装hypervisor,生成和管理虚拟机。像VMware、KVM、Xen、
没有固定的算法。但是一般会有几个限制:1.内存内存基本上是一个硬限制。物理服务器的内存肯定是有限的。例如,一台服务器有8 core,8G内存,通常hypervisor会占用512M内存,大概还剩下7.5G内存,假设每个虚拟机的配置是1 core cpu,1G内存,那么在此机器上最多可以运行7个这样的虚拟机。再创建...网卡如果服务器只有一个网卡,所有虚拟机的网络流量都是通过一块网卡出去,虚拟机越多,每个虚拟机可以使用的带宽就会越少,这个是需要综合考虑。例如使用多个网卡等。3.
步骤1:为我们的容器创建第一个镜像 以 centos 镜像作为基础镜像,我们启动自己的容器并在其中执行/bin/bash命令 注:-t-i 参数用于创建一个虚拟的命令行。sudo docker run-t-i centos/bin/bash 现在我们已经成功的运行了自己的第一个容器,并且进入到容器的命令行界面中。在容器中,我们执行...虚拟机的80端口在 Vagrantfile 中被绑定到主机的8080端口,也就是:主机8080->虚拟机80->容器80 sudo docker run-t-i-p 80:80-v/vagrant/htdocs:/var/
关于docker容器与虚拟机的对比,难道不是Docker官网讲解的最好吗?先从认识容器开始 将软件打包成标准...虚拟机(VM)是一个物理硬件层抽象,用于将一台服务器变成多台服务器。...关于docker容器与虚拟机的对比,难道不是Docker官网讲解的最好吗?先从认识容器开始 将软件打包成标准虚拟机(VM)是一个物理硬件层抽象,用于将一台服务器变成多台服务器。
建议选择双至强8核以上处理器.16G以上内存.1000G以上硬盘的配置.网卡选择双千M的.推荐用DELLR410或者DELLC1100等机型.托管到IDC机房以后建议用50G以上独享带宽.除此以外还需要你有一套虚拟主机管理系统以及20个以上的独立IP.用来分配与管理虚拟机. 考虑到成本和风险问题.建议你直接到IDC公司...然后一天开机时间需要到20个小时左右,主要想内存方面大1225 2G/500S,E3-1225的CPU,标配2G ECC内存,500G硬盘×2 RAID,要运行20个虚拟机得自己再添4G内存这样子。
使用虚拟机运行多个相互隔离的应用时,如下图:
从下到上理解上图:
  • 基础设施(Infrastructure)。它可以是你的个人电脑,数据中心的服务器,或者是云主机。
  • 主操作系统(Host Operating System)。你的个人电脑之上,运行的可能是MacOS,Windows或者某个Linux发行版。
  • 虚拟机管理系统(Hypervisor)。利用Hypervisor,可以在主操作系统之上运行多个不同的从操作系统。类型1的Hypervisor有支持MacOS的HyperKit,支持Windows的Hyper-V以及支持Linux的KVM。类型2的Hypervisor有VirtualBox和VMWare。
  • 从操作系统(Guest Operating System)。假设你需要运行3个相互隔离的应用,则需要使用Hypervisor启动3个从操作系统,也就是3个虚拟机。这些虚拟机都非常大,也许有700MB,这就意味着它们将占用2.1GB的磁盘空间。更糟糕的是,它们还会消耗很多CPU和内存。
  • 各种依赖。每一个从操作系统都需要安装许多依赖。如果你的的应用需要连接PostgreSQL的话,则需要安装libpq-dev;如果你使用Ruby的话,应该需要安装gems;如果使用其他编程语言,比如Python或者Node.js,都会需要安装对应的依赖库。
  • 应用。安装依赖之后,就可以在各个从操作系统分别运行应用了,这样各个应用就是相互隔离的。

理解Docker容器
使用Docker容器运行多个相互隔离的应用时,如下图:
不难发现,相比于虚拟机,Docker要简洁很多。因为我们不需要运行一个臃肿的从操作系统了。
从下到上理解上图:
  • 基础设施(Infrastructure)。
  • 主操作系统(Host Operating System)。所有主流的Linux发行版都可以运行Docker。对于MacOS和Windows,也有一些办法”运行”Docker。
  • Docker守护进程(Docker Daemon)。Docker守护进程取代了Hypervisor,它是运行在操作系统之上的后台进程,负责管理Docker容器。
  • 各种依赖。对于Docker,应用的所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的。
  • 应用。应用的源代码与它的依赖都打包在Docker镜像中,不同的应用需要不同的Docker镜像。不同的应用运行在不同的Docker容器中,它们是相互隔离的。

对比虚拟机与Docker
Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源;它还可以将容器与主操作系统隔离,并将各个容器互相隔离。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源。
说了这么多Docker的优势,大家也没有必要完全否定虚拟机技术,因为两者有不同的使用场景。虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用,例如前端,后端以及数据库。

其他回答2


Docker中文叫容器,和虚拟机有很多相似之处,也有诸多不同之处。用来运行生产系统,都是没问题的。虚拟机具有普适性,而Docker的轻量化更适合微服务架构的应用,下面我们就来了解一下:

1、Docker和虚拟机异同点


①、虚拟机
说起虚拟机我们都非常熟悉。它利用虚拟化技术将操作系统和物理服务器脱离关系,虚拟机通过虚拟层和宿主物理服务器打交道。这样,我们的宿主物理服务器只要性能足够,就可以运行大量的虚拟机。而虚拟机因为脱离了物理硬件的捆绑关系,也就具备了很多优点:
  • 完整性:虚拟机就是打包了操作系统、虚拟硬件等等的一组文件,它具有真实计算的完整功能;
  • 独立性:虚拟机和虚拟机之间本身是互相隔离的,就算两台虚拟机在同一台宿主机上,也不会因为其中一台虚拟机出问题,导致另外一台虚拟机出问题。
  • 可移植性:整个虚拟机是一组文件,可以很方便的复制迁移。一迁移就是这个系统都迁移出去了。
  • 高可用性:虚拟机因为和物理服务器脱离了捆绑关系,它可以在被虚拟化的服务器中自由漂移。任何一台物理服务器出现故障,虚拟机并不会因此无法工作。同时,当然虚拟化平台还提供了性能负载均衡和灾备的一些特性。
  • 高性能:单个虚拟机是无法突破宿主物理服务器的性能的,那如果要实现更大的性能,虚拟机可以组建集群,将集群虚拟机分布在不同的物理服务器中来实现。

当然,虚拟机不止我这里说的好处。它是云计算的最基础技术,没有它就无法实现云计算。


②、Docker
Docker是在虚拟机之后才出现的技术。它也是在操作系统之上的轻量化虚拟技术。它可以运行在传统的物理服务器上,也可以运行在虚拟机之中。它是将应用系统的运行环境和应用软件打包在一起的技术,它也具备很多优点:
  • 独立性:每一个Docker都是一套应用软件和配套环境,和其他Docker是互相隔离的;
  • 便捷性:软件从开发者手上开发出来到使用者这边,只需一个Docker镜像就可以把开发者的完整环境搬到使用者这边。无需重新配置环境。
  • 可移植性:Docker的可移植性主要是应用软件和环境可以快速迁移。
  • 高可用:Docker本身无法实现高可用。它需要借助分布式管理平台来实现高可用性,比如:著名的谷歌K8S,是一整套非常不错的分布式管理程序,已经可以实现所谓的“容器云”
  • 高性能:同样是通过分布式管理平台,来实现多个Docker的集群。性能不够就加Docker。

③、两者相同点和不同点
虚拟机和Docker都具有高可用和高性能的特点,他们都是一种虚拟化的技术。但两者也存在很多的不同点:
  • 虚拟机的虚拟化处在更宏观的层面,操作系统都被打包进去。优点在于无需重装系统,而且虚拟化可以和硬件直接打交道,性能调度掌握在虚拟平台上,缺点在于,每一个虚拟机都需要运行一套操作系统。
  • 而Docker的虚拟化则在更微观的层面,它并不是完整计算环境,它只打包了应用程序和环境,所以,缺点在于调度硬件的性能取决于外在操作系统,同时,Docker太多后关系非常复杂,人工是很难理清楚性能问题和故障的,还好容器平台都有自动化工具。它的优点就是非常轻量化,应用可移植性非常强,对软件开发来说非常方便。

2、Docker可以取代虚拟机的地方


通过上面虚拟机和Docker的对比发现,Dokcer更适合当前采用微服务架构的应用软件开发、部署、运维的所有过程。那到底什么是微服务架构呢?
这个起源于互联网公司,互联网的软件都是需要快速上线,持续迭代更新,又有大量的轻量并发访问。基于这些特点,互联网公司通常将一个大型的应用程序和服务拆分为数个甚至数十个的支持微服务,通常扩展单个组件而不是整个的应用程序堆栈,从而满足互联网访问这种特性。这就是我们常说的微服务。架构对比示意图如下:
从图中,我们可以看到传统架构是一个紧耦合的应用,各个模块都是集成在一个应用里面。不仅应用对性能要求高,数据库对性能要求也高。自然不适合Docker来做,更适合虚拟化或者物理集群来做。而微服务架构则不同,拆散成了很多个微小的服务组件,这样就比较适合Docker来开发部署了
当然,现在微服务架构已经不局限在互联网公司用了。只要具有互联网软件相似特点的应用,都可以采用微服务架构来开发。所以,Docker也就被用的越来越多。但Docker和虚拟化并不是互相排斥的,反而是相互贯通的

3、Docker和虚拟机是互相贯通的


因为Docker是微型虚拟化的容器,它可以运行在物理机操作系统上,也可以运行在虚拟机的操作系统之上。所以,Docker和虚拟机并不互相矛盾。反而是相辅相成的。现在,很多互联网应用都是在虚拟机组建的云端上部署Docker应用。这样既有云计算的弹性性能提供,也有Docker快速灵活部署应用的特点。是相辅相成的绝佳方法。

总结


总之,Docker是轻量级的虚拟化,只打包软件和软件运行环境。而虚拟机则是打包操作系统的重量级虚拟化。两者之间有虚拟化的共同特点,也有自己的独特性。在实际使用中,Docker非常适合采用微服务架构的软件开发、部署、运维。而虚拟机则普适性比较广,但它和Docker是互相贯通的,相辅相成的,并不矛盾冲突。

感谢阅读!我是数智风,用经验回答问题,欢迎评论关注。

收藏

相关推荐

清纯唯美图片大全

字典网 - 试题库 - 元问答 - 繁體 - 顶部

Copyright © cnj8 All Rights Reserved.