人文艺术 > 可以用docker代替虚拟机,运行生产服务器吗?

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

2020-09-17 16:37阅读(61)

可以用docker代替虚拟机,运行生产服务器吗?:正面回答这个问题之前,先看看虚拟机和Dcoker的区别。虚拟机:在一台物理机器上,利用虚拟化技术,虚拟出来多个操

1

正面回答这个问题之前,先看看虚拟机和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开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。

2

首先,大家需要明确一点,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通常用于隔离不同的应用,例如前端,后端以及数据库。

3

要回答这个问题,需要先了解虚拟机和docker的根本区别是什么。


从计算机软件层级来看,docker和虚拟机的区别在于虚拟的软件层级不一样。虚拟机基于同一个硬件,模拟出不同的操作系统;而docker基于同一个操作系统,模拟出不同的运行时环境。我们依次来看:

1. 先看看计算机的软件层次,从下到上依次为:操作系统内核、文件系统(运行时环境)、上层APP。

2. 虚拟机运行在同一个硬件上,可以虚拟出不同的操作系统。比如vmware可以在一台pc上既模拟出一个windows系统,同时也可以模拟出一台linux系统。借助虚拟机,两个不同的操作系统可以同时运行在同一个硬件之上。

3. 而docker则运行在同一个操作系统内核上,虚拟出不同的文件系统或者也可以叫做运行时环境。不同的运行时环境,其对应的文件系统也是不同的。比如java的运行时环境就要求文件系统里存在jdk,而golang的运行时环境则需要有go相关的底层库。在docker上既可以虚拟出一个java的运行时环境,也可以虚拟出go的运行时环境。甚至,基于docker,你既可以虚拟出一个java-1.6的运行时候环境,也可以虚拟出一个java-1.8的运行时环境,而这两个运行时环境可以同时运行在同一个操作系统之上


了解了虚拟机和docker的区别之后,那我们来看看楼主提出来的问题。这个问题的核心在于对“生产服务器”的理解。

如果把“生产服务器”理解成一个操作系统或者和操作系统紧耦合的环境,比如windows系统,那么显然是无法在docker上运行的;如果把“生产服务器”理解成一个独立的运行时环境,那么按照我们在上面的讲述,显然是可以在docker上运行的。

但是,我认为第二种解释要比较合理。

4
这个问题太好了,最近一直在学习docker,刚好昨天才把学习笔记整理出来发布到博客上。首先答案是可以的,具体怎样看我下面回答
  1. 首先说下服务器干嘛的,不就是为您的应用程序做服务的吗,把一个程序部署到服务就可以通过网址访问了。

  2. 那docker是干嘛的呢,也是为应用程序做服务的,是一个容器专门盛放应用程序的。把一个应用放到docker中就可以访问了。

服务器与docker有什么不同?

一个项目开发的过程中是不是经常碰到一个问题,在我这边运行的没问题啊,怎么在你那边运行就有问题呢?然后摔锅

应用部署到服务器上的过程:因为我是做java开发的,就拿一个正常的java项目举例。首先需要在服务器上搭建基础环境:

  • 配置jdk
  • 配置tomcat

  • 配置mysql
  • 配置redis

这只是一个简单的项目的部署前的配置,之后把您的项目打包发送的tomcat,运行即可。那如果有十几个服务器需要部署呢?是不是就要配置环境十多次,那人不是崩溃了。而且还会出现开发那边运行没问题,部署上去有问题的事情。所以这个时候docker出来了。
应用部署到docker上的过程:

  • 开发环境下直接打包成镜像

  • 把镜像上传到docker容器即可

两步搞定,不需要配置复杂的环境。如果有十多个容器需要部署怎么办?直接远程下载镜像即可,是不是很简单。

总结:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。也是闲着比较流行替代服务器的最佳选择


如果您有什么问题欢迎在评论区留言指出

5

先来简单区分一下虚拟机和docker两个概念。


虚拟机一般指的是完全虚拟化的那种,在虚拟机内部和外部系统是完全隔离的,一般我们买的阿里云什么的虚拟主机都是这种,这样的优点是安全,因为虚拟机内部怎么乱搞都不会影响主系统,缺点也有,就是性能略差。这里性能差主要在于系统读写操作,运行速度的话差不了多少,因为现在的处理器都原生支持虚拟化。


docker是目前衍生出来的新技术,有点类似虚拟机,可以将要运行的项目里各种运行库打包起来,这样我们运维的时候不需要一个一个安装那些依赖,直接下载一个docker包即可,大大简化了部署流程。所以现在docker已经成为了主流。但是docker并不是虚拟机那样的全虚拟化,而是半虚拟化,虽然内部有自己的文件系统,但是进程什么的并不是完全独立的,可以在主系统中看到。


这里我不清楚题目中的“用docker运行生产服务器”是什么意思。如果说的是能不能把项目做成docker来用,那么答案自然是可以的,因为docker本来设计出来就是这么用的。如果意思是能不能用docker代替虚拟机来运行服务器系统本身,那么当然是不行的。虚拟机具有docker所不具备的特性,不能简单的和docker做替代。

6

答案肯定是可以的,这已经是当前的流行趋势,从mysql就能看得出来,数据库这么重要的东西都能通过docker来运行,更不用说我们的小项目了;如果说你们公司还没有应用docker和kubernetes,只能说你们是传统行业,技术迭代的速度有点儿慢。

有图有真相,上图是docker官方网站的大背景图,企业级容器平台、快速安全可靠。

docker有如下特点

  • 标准:Docker镜像有着同样的标准,可移植,可以根据镜像快速构建容器服务。

  • 轻量级:容器共享物理机器,每个应用程序不需要单独的操作系统,从而提高服务器利用率。

  • 安全:应用程序在容器中更安全,Docker提供业界最强的默认隔离功能。

传统虚拟机相比docker而言:

虚拟机是将一台服务器转变为多台服务器的物理硬件的抽象,允许多个虚拟机在一台机器上运行,每个虚拟机都包含一个操作系统、应用程序、必要的二进制文件和库的完整副本,占用了数十个GB,另外虚拟机的启动速度也很慢。


除此之外相比传统的部署方式,每次都是安装完一个软件再安装另一个软件,大量重复的工作,并且在安装过程中易出错,结果难易保证。和docker相比较,方便、易管理、标准等以上特性还不足以让你去尝试吗?

7

理论上是完全可以的,现实中公司也有人这么做了!

问题:

1 docker作为比较新兴的一门技术,虽然带来容器化管理的便捷性,但也增加学习成本

2 docker作为单一服务服务来说,简单快捷,但整套系统都使用docker,docker和docker之间的通信问题等,对设计者来说是一个需要新的思维去搭建合理架构

3 docker相对于传统的服务器部署,可以搜索到的资料相对较少,出问题排查困难

总结:docker作为一款比较成熟的新兴技术,虽然提供了一系列的便捷之处,

但想直接代替服务器,还要经过严谨的验证测试再实施!


评论区中被喷了之后,果断各种查资料,确认了一下,以免误人子弟!

结论:

1 docker可以直接安装在linux物理机上,然后构建容器来运行项目

2 一般情况docker构建虚拟在虚拟机上,能够更加方便维护


感谢评论区大神们的指正,如果还有不对的言论,还请指正!

8

Docker天生就是用来干这事的。


Docker最适合以单一进程方式,运行微服务的架构组件。如果你要把docker当成桌面用,安装上百十来个工具软件,不停切换,那docker还真不适用。


Docker在实际性能上,要远远高于虚拟机。按照经验判断,我们认为kvm方式的虚拟化,服务器性能有20%左右的损耗,而通过容器方式,性能损耗几乎可以忽略不计。

9

docker适合平台统一在linux的大单位用,服务越多越好,比如几百、几千、几万。配合k8s调度和微服务改造、加上自动化运维,能够实现弹性扩容和缩容,达到on demand的效果,典型的用例是互联网内容提供商。

对于一般中小企业,只有几十台服务器的,平台不统一的,投资docker不如虚拟机。

除了不能跨os平台,docker的另一个缺陷是隔离度不够。

10

先说答案:可以,但是没有必要。

容器技术是虚拟化技术的应用,使用容器代替虚拟机运行程序自然是可以的,容器在持续集成方面相对虚拟机还有一定的优势,但是如果仅仅是为了用容器而用容器,则没有必要。

容器技术最大的优势是容器编排,可以实现线上服务的无缝扩容,缩容,降级,熔断等自动化操作,极大的降低运维成本。所以,如果不用容器编排,则无须急着迁移。