虚拟机 容器(vm虚拟机自启动容器后自动跳转到命令行)

:暂无数据 2026-08-13 12:40:27 :1

虚拟机 容器(vm虚拟机自启动容器后自动跳转到命令行)

大家好,虚拟机 容器相信很多的网友都不是很明白,包括vm虚拟机自启动容器后自动跳转到命令行也是一样,不过没有关系,接下来就来为大家分享关于虚拟机 容器和vm虚拟机自启动容器后自动跳转到命令行的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

vm虚拟机自启动容器后自动跳转到命令行

1. 进入到 VMware workstation 的安装目录,找一下 vmrun.exe 文件,并设置环境变量
1-1)桌面找到VMware图标,右键/打开文件所在位置,复制该路径即可(C:Program Files (x86)VMwareVMware Workstation)
1-2)设置环境变量
右键我的电脑/属性/高级系统设置(右侧)/环境变量
根据客户需求,将VMware Workstation里的虚机设置开机启动
找到path,然后点击
根据客户需求,将VMware Workstation里的虚机设置开机启动
然后点击新建,将上面复制的VMware安装路径粘贴进去确认即可
1-3) 测试环境变量安装成功
win + r;然后cmd打开命令行模式
输入命令vmrun,有输出则为正常
根据客户需求,将VMware Workstation里的虚机设置开机启动
2. 配置开启启动脚本
桌面上新建文件start_vm.txt
写入命令vmrun -T ws start “C:VMware-workstationvm-01vm-01.vmx” nogui

docker容器中运行windows虚拟机

docker容器中运行windows虚拟机的方法。
1、安装完成必要的组件之后,从桌面上的“Boot2DockerStart”快捷方式启动Boot2Docker。
2、启动一个配置好的用于管理在虚拟机中运行的Docker的unixshell。
3、检查否确配置运行面dockerversion命令。

容器与虚拟机的区别

1、容器:开发,测试和生产环境一致性,在本地或外网运行的一致性。虚拟机:自定义镜像即可达成环境一致性容器:云平台或其他操作系统,可以在Ubuntu、RHEL、CoreOS、on-prem、GoogleContainerEngine或其它任何环境中运行。

2、容器可以看成一个装好了一组特定应用的虚拟机,它直接利用了宿主机的内核,它相对于虚拟机而言,抽象层更少,更加轻量化以及启动速度更快等等。云容器拥有着更高的资源使用效率,这是虚拟机所不能比拟的。

3、容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟,而是对进程进行封装隔离。

什么是轻量级虚拟化技术

人们在使用虚拟化一段时间后,发现它存在一些问题:不同的用户,有时候只是希望运行各自的一些简单程序,跑一个小进程。为了不相互影响,就要建立虚拟机。如果建虚拟机,显然浪费就会有点大,而且操作也比较复杂,花费时间也会比较长。
而且,有的时候,想要迁移自己的服务程序,就要迁移整个虚拟机。显然,迁移过程也会很复杂。
有没有办法更灵活快速一些呢?
有,这就引入了“容器(Container)”。
容器也是虚拟化,但是属于“轻量级”的虚拟化。它的目的和虚拟机一样,都是为了创造“隔离环境”。但是,它又和虚拟机有很大的不同——虚拟机是操作系统级别的资源隔离,而容器本质上是进程级的资源隔离。
虚拟化 VS 容器
而大家常听说的Docker,就是创建容器的工具,是应用容器引擎。
Docker的中文意思,就是码头工人。而它的LOGO,就是一只鲸鱼背着很多货柜箱。
相比于传统的虚拟机,Docker的优势很明显,它启动时间很快,是秒级,而且对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB,而容器只需要MB级甚至KB级。
除了Docker对容器进行创建之外,我们还需要一个工具,对容器进行编排。
这个工具,就是K8S。
K8S,就是Kubernetes,中文意思是舵手或导航员。Kubernetes这个单词很长,所以大家把中间8个字母缩写成8,就成了K8S。
K8S是一个容器集群管理系统,主要职责是容器编排(Container Orchestration)——启动容器,自动化部署、扩展和管理容器应用,还有回收容器。
简单来说,K8S有点像容器的保姆。它负责管理容器在哪个机器上运行,监控容器是否存在问题,控制容器和外界的通信,等等。
通过下面这张K8S系统结构图,就能够看出K8S和容器之间的关系。
除了K8S之外,还有很多种容器管理平台,例如Compose,Marathon,Swarm,Mesos等。
Docker和K8S,关注的不再是基础设施和物理资源,而是应用层

Docker容器是什么它比虚拟机强在何处

Docker容器是一个开源的应用容器引擎,可以让开发者用统一的形式打包其自身的应用,然后包装到一个可以移植的容器中,随后发布到任何可以安装Docker引擎的服务器上(比如主流的Linux机器或者是Windows机器),当然也可以实现虚拟化。Docker容器几乎没有性能开销,可以很容易的在机器和数据中心运行,其最大的特色就是不依赖任何系统,框架甚至是语言。
由于容器是进程级的,相比于虚拟机有着很多的优势
一:启动速度快:由于容器里面的应用软件,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以启动容器时,不是启动一整个操作系统,速度就快了很多。
二:资源占用少:相比于虚拟机而言,容器只占用需要的资源,不会去占有无效的资源,而虚拟机则是一个完整的操作系统,不可避免的占用了所有资源。
三:体积小,轻量级:容器只需要包含用到的组件,对比于虚拟机,容器文件要比虚拟机小很多。
四:方便移动:容器技术最重要的就是为不同的主机上运行服务一个轻便,一致的格式。容器的格式更加标准化且方便客户对工作负载的迁移,有效避免单一的平台提供商。

云容器和虚拟机哪个好

  原生的对立面当然是非原生(虚拟化),即使是在CPU 和操作系统内核支持的情况下虚拟机上的操作系统及业务系统所使用硬件资源仍然不直接寻址的。一个基于虚拟机运行的业务系统与原生操作系统中间隔着一个虚拟系统,有如人与人之间隔阂,不仅会损失硬件性能还会让多可以直接寻址的接口操作都需要驱动级的映射才能完成,兼容性的问题有时也困扰运维人员。而容器技术越发成熟之后各个沙盒间的相互独立互不影响,却能直接使用原生系统的资源。硬件资源的利用率更高。而且容器的创建与维护比虚拟机更简单,一个业务系统在虚拟机上交付,需要有足够的资源来创建虚拟机,然后为虚拟机安装操作系统、部署业务系统所需的各种支持环境。如果多个业务系统所需要支持环境依赖库间有冲突互斥你则需要新建更多的虚拟机。反之对于容器而言只需要再开一个镜像即可。
  
云原生更节省物理服务器的硬件资源;更易于业务系统的快速交付。是微服务架构、无服务器架构的时代这项技术更为云平台服务提供了基础支撑,在虚拟化时代一个开发人员为了发布自己的应用,需要去租用一个云主机或VPS ,自由的按需配置管理云主机的操作系统与支持环境配置及参数,然后发布自己业务和WEB应用。在采用无服务架构在模式下,你可能根本不需要一台服务器,更不用去关于如何去配置服务器,需要只是服务本身,云端的容器中的WEB 服务或数据库服务会提供接口给开发者,开发者只用关心程序的实现,不用折腾服务器与环境的配置。
 

教你探测虚拟环境是物理机、虚拟机还是容器

目前裸机(物理机)、虚拟机、容器是云计算提供计算服务的三种主流形式。那么如何判断一个虚拟shell环境到底是物理机、虚拟机还是容器呢?

更进一步,如果是物理机,这个物理机厂商是什么,虚拟机到底是KVM还是XEN,容器是Docker还是rkt、lxc等?

更进一步,如果是虚拟机,是否可以判断这个虚拟机是运行在AWS还是阿里或者OpenStack,是否能够获取虚拟机的UUID、instance-type、vpc-id、安全组等信息?

如果使用了systemd,则可以直接通过 systemd-detect-virt 命令判断是否物理机:
如上可以看出这台是物理机,厂商为LENOVO,型号为ThinkServer RD640,序列号为NC01711670
当然如果是虚拟机,如上命令会执行失败。另外也可以通过其他命令查看物理信息,如 lshw 命令。

其实前面已经提到了,如果使用了systemd,则可以直接通过 systemd-detect-virt 命令判断是否虚拟机:

如果是虚拟机,则会输出虚拟机类型,如kvm、oracle(virtualbox)、xen等。
参考物理机的获取方式,我们可以通过dmidecode命令获取更多的虚拟机信息。比如我在一台KVM虚拟机运行如下命令:

如上Product Name为KVM,说明运行在KVM平台,而UUID即虚拟机的UUID。
XEN上的一台虚拟机输出为:

如上Manufacturer为XEN,说明运行在XEN平台,而UUID即虚拟机的UUID。
腾讯云的虚拟机如下:

华为云的虚拟机如下:

如上Manufacturer为 OpenStack Foundation ,说明运行在OpenStack平台,而UUID即虚拟机的UUID。

可见虽然可以从system信息中获取云厂商的线索,但其实虚拟机的system信息并没有统一的标准,有的在version中体现,有的在Product Name中表现,完全取决于云厂商自己的配置。

目前还没有什么方法能够100%准确判断虚拟环境是否是容器
如果环境有 systemd-detect-virt 命令,则可以直接通过 systemd-detect-virt -c 命令判断,如果输出为 none 则不是容器,否则会输出容器类型,比如lxc。目前很少容器里面放 systemd 的,我见过的就只有LXD的 ubuntu 镜像,因此这种方法适用性不广。

1.查看目前默认的启动默认

2.设置为图形界面模式

3.设置为命令行模式

svm - Secure virtual machine, AMD的虚拟化技术AMD-V
vmx - Intel的虚拟化技术Intel-VT

容器和虚拟机的区别

相比于虚拟机,容器拥有更高的资源使用效率,因为它并不需要为每个应用分配单独的操作系统——实例规模更小、创建和迁移速度也更快。这意味相比于虚拟机,单个操作系统能够承载更多的容器。
容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟,而是对进程进行封装隔离。
容器可以看成一个装好了一组特定应用的虚拟机,它直接利用了宿主机的内核,它相对于虚拟机而言,抽象层更少,更加轻量化以及启动速度更快等等。云容器拥有着更高的资源使用效率,这是虚拟机所不能比拟的。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
与虚拟机相比,docker隔离性更弱,docker属于进程之间的隔离,虚拟机可实现系统级别隔离。安全性:docker的安全性也更弱。
启动快,容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。

docker容器与虚拟机有什么区别

我们单位最近在推docker,已经在开发测试环境使用(稍显落后),下面我就谈谈自己的Docker的理解,以及Docker和虚拟机的区别。

虚拟机

先说说什么是虚拟机:在一台物理机器上,利用虚拟化技术,虚拟出来多个操作系统,每个操作系统之间是隔离的。

说起来有些绕,那么我们看看虚拟机的架构图,就容易理解了。例如我们要在一台物理机器运行三个Java项目,彼此之间隔离。

从下往上看, 解释起来其实很简单:

最下面的一层就是物理机,可以是服务器,设置是一台个人电脑;

Docker

再说说什么是Docker,找了一句官方的解释:Docker是开源的应用容器引擎。是不是又一头雾水?我们还是先看看Docker的架构图。

依然从下往上看:

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

谢谢了!docker容器域虚拟机有什么区别呢?

docker容器: Docker 容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。

虚拟机: 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实windows系统完全一样的功能,进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何影响 ,而且具有能够在现有系统与虚拟镜像之间灵活切换的一类操作系统。虚拟系统和传统的虚拟机(Parallels Desktop ,Vmware,VirtualBox,Virtual pc)不同在于:虚拟系统不会降低电脑的性能,启动虚拟系统不需要像启动windows系统那样耗费时间,运行程序更加方便快捷;虚拟系统只能模拟和现有操作系统相同的环境,而虚拟机则可以模拟出其他种类的操作系统;而且虚拟机需要模拟底层的硬件指令,所以在应用程序运行速度上比虚拟系统慢得多。 对比虚拟机与DockerDocker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源;它还可以将容器与主操作系统隔离,并将各个容器互相隔离。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源。说了这么多Docker的优势,大家也没有必要完全否定虚拟机技术,因为两者有不同的使用场景。虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用,例如前端,后端以及数据库。


docker解决的主要问题

有过后台开发经验的同学,一定遇到过下面这些问题:

那么,有了docker,这些问题都将不复存在。

什么是docker

Docker是一个虚拟环境容器,可以将你的可执行文件、配置文件及一切其他你需要的文件一并打包到这个容器中,并发布和应用到任意平台。比如,你在本地用Python开发了一个网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。

如果不好理解,我们再拿集装箱打个比方。

集装箱解决了什么问题呢?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。

docker也是类似的理念。我们可以在一台机器上跑多个互相毫无关联的docker容器,每一个容器就相当于一个集装箱。

docker里的几个基本概念 与传统虚拟化的区别

这里我们顺便讲一下传统虚拟化。

我们看到,传统虚拟化是站在硬件物理资源的基础上,虚拟出多个OS,然后在OS的基础上构建相对独立的程序运行环境,而Dokcer则是在OS的基础上进行虚拟,显然Dokcer轻量得多,因此其资源占用、性能消耗相比传统虚拟化都有很大优势。

在IT行业从业多年,也算从看着时代从物理服务器走向虚拟化云计算时代,又准备进入Docker时代,作为下一代虚拟化技术,Docker正改变着整个行业开发、测试、部署应用的方式,至于虚拟化技术和docker技术到底有什么不同,下面来分析一下。


01 什么是虚拟化?

顾名思义,虚拟化技术是将物理资源以某种技术虚拟成资源池的形式,主要有一虚多和多虚一两种形式,比如个人电脑安装Vmware软件,可以在这个软件上安装其他Win系统、MacOS、Linux系统等,实现一台电脑/笔记本承载多个系统的优点,目前苹果笔记本用户双系统解决方案也以虚拟机为主,普通Windows用户可能需求量不大,而技术人员基本是必备软件了。


从企业层面来看,多虚一为主要形式,也就是将大量物理服务器集群虚拟化,形成一个资源池,在这个资源上创建各种不同的虚拟机,实现灵活部署。


02 什么是Docker

其实docker和虚拟技术很像,但又有一些不同点,一方面是两个技术的层级上,虚拟机一般是底层硬件Hardware支撑,上层是虚拟管理系统Hypervisor层,在上层开启不同的VM业务,如果需要将这些业务进行隔离,需要每个VM启动客户机操作系统,非常消耗资源。



Docker完全不同,底层有硬件和Host OS系统支撑,比如Windows/MacOS/Linux,中间抛去了臃肿的系统,而是以Docker守护进程代替,上层建立不同的容器,不同的应用镜像打包在不同的容器中,他们互相隔离。


03 虚拟化与docker的区别

docker设计小巧,部署迁移快速,运行高效,应用之间相互独立,管理人员可以看到所有容器的内容,虚拟化技术比较臃肿,不论什么应用都需要先创建新的系统,并且并非按照应用隔离,而是按照系统隔离,管理员无法看到系统内部信息。

举个例子,Docker就是手机中的各种APP,只需要一个系统就可以下载自己所需的应用,但是虚拟化技术相当于你的苹果手机安装一个庞大软件,这个软件上安装安卓系统、魅族系统等,每个系统上还要安装各类应用,比较麻烦。


但两者没有绝对的好坏,主要还是看应用场景,根据不同的需求选择不同的解决方案即可。


Docker与虚拟机介绍

虚拟机: 传统的虚拟机需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给他的资源将全部被占用,每一个虚拟机包括应用,必要的二进制和库以及一个完整的用户操作系统。

容器(Docker): 容器与的宿主机共享硬件资源及操作系统可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。

虚拟机和容器都是在硬件和操作系统以上的,虚拟机有Hypervisor层(“翻译”客户系统和宿主系统之间的指令),Hypervisor是整个虚拟机的核心所在。他为虚拟机提供了虚拟的运行平台,管理虚拟机的操作系统运行。每个虚拟机都有自己的系统和系统库以及应用。

容器没有Hypervisor层,它是内核级的虚拟化,并且每个容器与宿主机共享硬件资源及操作系统,因此Docker容器不存在Hypervisor层带来性能的损耗,因此可以实现更高的性能和效率。但是虚拟机技术也有其优势,能为应用提供一个更加隔离的环境,不会因为应用程序的漏洞给宿主机造成任何威胁。

虚拟机是对硬件资源的虚拟,容器技术则是对进程的虚拟,从而可提供更轻量级的虚拟化,实现进程和资源的隔离。从架构来看,Docker比虚拟化少了两层,取消了hypervisor层和GuestOS层,使用 Docker Engine 进行调度和隔离,所有应用共用主机操作系统,因此在体量上,Docker较虚拟机更轻量级,在性能上优于虚拟化,接近物理机原生性能。

Docker的优势

持续部署与测试

更高效的利用系统资源

交付物标准化

应用隔离

高性能

最近刚好看了一部分docker的东西
先上图,vm与docker框架,直观上来讲 vm多了一层guest OS,同时Hypervisor会对硬件资源进行虚拟化,docker直接使用硬件资源 ,所以资源利用率相对docker低也是比较容易理解的




其次,openstack能够以10台/min的速度创建虚拟机,在docker面前就弱爆了,因为docker是利用宿主机的系统内核,所以可以做到在几秒钟之内创建大量容器,它们的 启动速度是在数量级上的差距 。

最后找了一个IBM测试案例,关于计算能力的,对于kvm为什么会有这么大的性能损失,一方面是因为虚拟机增加了一层虚拟硬件层,运行在虚拟机上的应用程序在进行数值计算时是运行在Hypervisor虚拟的CPU上的;另外一方面是由于计算程序本身的特性导致的差异。虚拟机虚拟的cpu架构不同于实际cpu架构,数值计算程序一般针对特定的cpu架构有一定的优化措施,虚拟化使这些措施作废,甚至起到反效果。比如对于本次实验的平台,实际的CPU架构是2块物理CPU,每块CPU拥有16个核,共32个核,采用的是NUMA架构;而虚拟机则将CPU虚拟化成一块拥有32个核的CPU。这就导致了计算程序在进行计算时无法根据实际的CPU架构进行优化,大大减低了计算效率。

从计算机软件层级来看,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悄无声息的来到我们身边,正在改变我们的开发、测试、部署应用的方式,那么,到底Docker和虚拟机VM有什么区别,我们通过一个图,再配上简明扼要的文字就很容易理解两者之间的区别。

首先要明确:Docker是一个开源的应用容器引擎,而VM是一个完整的操作系统。

1、使用VM运行多个相互隔离的应用

解释:

可以看到,APP #1、APP #2、APP #3如果要独立运行,相互隔离,则需要安装三个操作系统。如果一个虚拟操作系统按1G算,总共需要占3G的存储空间,更槽糕的是,光运行这三个操作系统就要耗费很大的内存和CPU。

2、使用Docker运行多个相互隔离的应用

DOCKER DAEMON:Docker守护进程,负责管理Docker容器。

Docker运行在主操作系统之上,APP #1、APP #2、APP #3在Docker中是完全隔离的、相经独立的容器。跟VM相比,省去了庞大的操作系统,耗费硬件资源较少。


除了以上架构上的差异之外,VM和Docker在启动时间上也有着很大的差距,VM启动大概需要2分钟的时间,而Docker启动则只需2秒。


随着互联网的发展,Docker的应用会越来越广,Build once,run anywhere,一次构建,到处运行。

docker是虚拟化软件运行环境。

虚拟机是虚拟化硬件。

层次不同。

虚拟机更消耗资源。但带来的是一个完整的可以不同于宿主机的操作系统。因为和宿主机操作系统不共享任何东西(包括硬件,内核,动态库,环境变量等),它的隔离性更好。

docker更轻量级,共享使用宿主机的硬件和内核,资源占用更少。它在宿主机内核基础上虚拟化了一个不同于宿主机的软件运行环境,比如动态库,环境变量等。可以说,docker和宿主机之间除了内核共享,其它都可以不同。

Docker容器启动、停止速度快rr Docker容器对资源需求较少rr Docker操作简单rr Dockerfile自动构建和部署方便

生产环境,测试环境中,Docker 可以做什么

Docker 是容器管理工具

Docker
是一个轻量级、便携式、与外界隔离的容器,也是一个可以在容器中很方便地构建、传输、运行应用的引擎。和传统的虚拟化技术不同的是,Docker
引擎并不虚拟出一台虚拟机,而是直接使用宿主机的内核和硬件,直接在宿主机上运行容器内应用。也正是得益于此,Docker
容器内运行的应用和宿主机上运行的应用性能差距几乎可以忽略不计。

但是 Docker 本身并不是一个容器系统,而是一个基于原有的容器化工具 LXC 用来创建虚拟环境的工具。类似 LXC 的工具已经在生产环境中使用多年,Docker 则基于此提供了更加友好的镜像管理工具和部署工具。

Docker 不是虚拟化引擎

Docker 第一次发布的时候,很多人都拿 Docker 和虚拟机 VMware、KVM 和 VirtualBox
比较。尽管从功能上看,Docker 和虚拟化技术致力于解决的问题都差不多,但是 Docker
却是采取了另一种非常不同的方式。虚拟机是虚拟出一套硬件,虚拟机的系统进行的磁盘操作,其实都是在对虚拟出来的磁盘进行操作。当运行 CPU
密集型的任务时,是虚拟机把虚拟系统里的 CPU
指令“翻译”成宿主机的CPU指令并进行执行。两个磁盘层,两个处理器调度器,两个操作系统消耗的内存,所有虚拟出的这些都会带来相当多的性能损失,一台虚拟机所消耗的硬件资源和对应的硬件相当,一台主机上跑太多的虚拟机之后就会过载。而
Docker 就没有这种顾虑。Docker 运行应用采取的是“容器”的解决方案:使用 namespace 和 CGroup
进行资源限制,和宿主机共享内核,不虚拟磁盘,所有的容器磁盘操作其实都是对 /var/lib/docker/
的操作。简言之,Docker 其实只是在宿主机中运行了一个受到限制的应用程序。

从上面不难看出,容器和虚拟机的概念并不相同,容器也并不能取代虚拟机。在容器力所不能及的地方,虚拟机可以大显身手。例如:宿主机是
Linux,只能通过虚拟机运行 Windows,Docker 便无法做到。再例如,宿主机是 Windows,Windows 并不能直接运行
Docker,Windows上的 Docker 其实是运行在 VirtualBox 虚拟机里的。

Docker 使用层级的文件系统

前面提到过,Docker 和现有容器技术 LXC 等相比,优势之一就是 Docker 提供了镜像管理。对于 Docker
而言,镜像是一个静态的、只读的容器文件系统的快照。然而不仅如此,Docker
中所有的磁盘操作都是对特定的Copy-On-Write文件系统进行的。下面通过一个例子解释一下这个问题。

例如我们要建立一个容器运行 JAVA Web 应用,那么我们应该使用一个已经安装了 JAVA 的镜像。在
Dockerfile(一个用于生成镜像的指令文件)中,应该指明“基于 JAVA 镜像”,这样 Docker 就会去 Docker Hub
Registry 上下载提前构建好的 JAVA 镜像。然后再 Dockerfile 中指明下载并解压 Apache Tomcat 软件到 /opt/tomcat
文件夹中。这条命令并不会对原有的 JAVA 镜像产生任何影响,而仅仅是在原有镜像上面添加了一个改动层。当一个容器启动时,容器内的所有改动层都会启动,容器会从第一层中运行 /usr/bin/java
命令,并且调用另外一层中的 /opt/tomcat/bin
命令。实际上,Dockerfile 中每一条指令都会产生一个新的改动层,即便只有一个文件被改动。如果用过 Git
就能更清楚地认识这一点,每条指令就像是每次 commit,都会留下记录。但是对于 Docker
来说,这种文件系统提供了更大的灵活性,也可以更方便地管理应用程序。

我们Spantree的团队有一个自己维护的含有 Tomcat 的镜像。发布新版本也非常简单:使用 Dockerfile
将新版本拷贝进镜像从而创建一个新镜像,然后给新镜像贴上版本的标签。不同版本的镜像的不同之处仅仅是一个 90 MB 大小的 WAR
文件,他们所基于的主镜像都是相同的。如果使用虚拟机去维护这些不同的版本的话,还要消耗掉很多不同的磁盘去存储相同的系统,而使用 Docker
就只需要很小的磁盘空间。即便我们同时运行这个镜像的很多实例,我们也只需要一个基础的 JAVA / TOMCAT 镜像。

Docker 可以节约时间

很多年前我在为一个连锁餐厅开发软件时,仅仅是为了描述如何搭建环境都需要写一个 12 页的 Word 文档。例如本地 Oracle
数据库,特定版本的
JAVA,以及其他七七八八的系统工具和共享库、软件包。整个搭建过程浪费掉了我们团队每个人几乎一天的时间,如果用金钱衡量的话,花掉了我们上万美金的时间成本。虽然客户已经对这种事情习以为常,甚至认为这是引入新成员、让成员适应环境、让自己的员工适应我们的软件所必须的成本,但是相比较起来,我们宁愿把更多的时间花在为客户构建可以增进业务的功能上面。

如果当时有 Docker,那么构建环境就会像使用自动化搭建工具 Puppet / Chef / Salt / Ansible
一样简单,我们也可以把整个搭建时间周期从一天缩短为几分钟。但是和这些工具不同的地方在于,Docker
可以不仅仅可以搭建整个环境,还可以将整个环境保存成磁盘文件,然后复制到别的地方。需要从源码编译 Node.js 吗?Docker
做得到。Docker 不仅仅可以构建一个 Node.js 环境,还可以将整个环境做成镜像,然后保存到任何地方。当然,由于 Docker
是一个容器,所以不用担心容器内执行的东西会对宿主机产生任何的影响。

现在新加入我们团队的人只需要运行 docker-compose up
命令,便可以喝杯咖啡,然后开始工作了。

Docker 可以节省开销

当然,时间就是金钱。除了时间外,Docker 还可以节省在基础设施硬件上的开销。高德纳和麦肯锡的研究表明,数据中心的利用率在 6% -
12% 左右。不仅如此,如果采用虚拟机的话,你还需要被动地监控和设置每台虚拟机的 CPU 硬盘和内存的使用率,因为采用了静态分区(static

partitioning)所以资源并不能完全被利用。。而容器可以解决这个问题:容器可以在实例之间进行内存和磁盘共享。你可以在同一台主机上运行多个服务、可以不用去限制容器所消耗的资源、可以去限制资源、可以在不需要的时候停止容器,也不用担心启动已经停止的程序时会带来过多的资源消耗。凌晨三点的时候只有很少的人会去访问你的网站,同时你需要比较多的资源执行夜间的批处理任务,那么可以很简单的便实现资源的交换。

虚拟机所消耗的内存、硬盘、CPU 都是固定的,一般动态调整都需要重启虚拟机。而用 Docker 的话,你可以进行资源限制,得益于
CGroup,可以很方便动态调整资源限制,让然也可以不进行资源限制。Docker
容器内的应用对宿主机而言只是两个隔离的应用程序,并不是两个虚拟机,所以宿主机也可以自行去分配资源。

Docker 有一个健壮的镜像托管系统

前面提到过,这个托管系统就叫做 Docker Hub Registry。截止到 2015年4月29日,互联网上大约有 14000
个公共的 Docker,而大部分都被托管在 Docker Hub 上面。和 Github 已经很大程度上成为开源项目的代表一样,Docker
官方的 Docker Hub 则已经是公共 Docker 镜像的代表。这些镜像可以作为你应用和数据服务的基础。

也正是得益于此,你可以随意尝试最新的技术:说不定有些人就把图形化数据库的实例打包成了 Docker 镜像托管在上面。再例如
Gitlab,手工搭建 Gitlab 非常困难,译者不建议普通用户去手工搭建,而如果使用 Docker
Gitlab,这个镜像则会五秒内便搭建完成。再例如特定 Ruby 版本的 Rails 应用,再例如 Linux 上的 .NET
应用,这些都可以使用简单的一条 Docker 命令搭建完成。
Docker 官方镜像都有 official 标签,安全性可以保证。但是第三方镜像的安全性无法保证,所以请谨慎下载第三方镜像。生产环境下可以只使用第三方提供的 Dockerfile 构建镜像。

Docker Github 介绍:5 秒内搞定一个 Gitlab
关于 Linux 上的 .NET 应用和 Rails 应用,将会在以后的文章中做详细介绍。
Docker 可以避免产生 Bug

Spantree 一直是“固定基础设置”(immutable
infrastructure)的狂热爱好者。换句话说,除非有心脏出血这种漏洞,我们尽量不对系统做升级,也尽量不去改变系统的设置。当添加新服务器的时候,我们也会从头构建服务器的系统,然后直接将镜像导入,将服务器放入负载均衡的集群里,然后对要退休的服务器进行健康检查,检查完毕后移除集群。得益于
Docker 镜像可以很轻松的导入导出,我们可以最大程度地减少因为环境和版本问题导致的不兼容,即便有不兼容了也可以很轻松地回滚。当然,有了
Docker,我们在生产、测试和开发中的运行环境得到统一。以前在协同开发时,会因为每个人开发的电脑配置不同而导致“在我的电脑上是能运行的,你的怎么不行”的情况,而如今
Docker 已经帮我们解决了这个问题。

Docker 目前只能运行在 Linux 上

前面也提到过,Docker 使用的是经过长时间生产环境检验的技术,虽然这些技术已经都出现很长时间了,但是大部分技术都还是 Linux
独有的,例如 LXC 和 Cgroup。也就是说,截止到现在,Docker 容器内只能在 Linux 上运行 Linux
上的服务和应用。Microsoft 正在和 Docker 紧密合作,并且已经宣布了下一个版本的 Windows Server 将会支持
Docker 容器,并且命名为 Windows Docker,估计采用的技术应该是Hyper-V
Container,我们有望在未来的几年内看到这个版本。

文章分享结束,虚拟机 容器和vm虚拟机自启动容器后自动跳转到命令行的答案你都知道了吗?欢迎再次光临本站哦!

虚拟机 容器(vm虚拟机自启动容器后自动跳转到命令行)

本文编辑:admin

更多文章:


双色球浙江风采超长版2005(2005年浙江超长版双色球走势图)

双色球浙江风采超长版2005(2005年浙江超长版双色球走势图)

本篇文章给大家谈谈双色球浙江风采超长版2005,以及2005年浙江超长版双色球走势图对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月11日 03:20

深圳龙华人民医院疑似病例(西安新增2例确诊1例初筛阳性,当地针对此情况采取了哪些措施)

深圳龙华人民医院疑似病例(西安新增2例确诊1例初筛阳性,当地针对此情况采取了哪些措施)

本篇文章给大家谈谈深圳龙华人民医院疑似病例,以及西安新增2例确诊1例初筛阳性,当地针对此情况采取了哪些措施对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年10月11日 02:40

林俊杰现在还属华纳吗(林俊杰现在还是华纳的艺人吗)

林俊杰现在还属华纳吗(林俊杰现在还是华纳的艺人吗)

其实林俊杰现在还属华纳吗的问题并不复杂,但是又很多的朋友都不太了解林俊杰现在还是华纳的艺人吗,因此呢,今天小编就来为大家分享林俊杰现在还属华纳吗的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 00:20

乌克兰军事威胁俄罗斯代表(俄罗斯平静面对西方制裁,这个国家为什么这么有底气呢)

乌克兰军事威胁俄罗斯代表(俄罗斯平静面对西方制裁,这个国家为什么这么有底气呢)

大家好,如果您还对乌克兰军事威胁俄罗斯代表不太了解,没有关系,今天就由本站为大家分享乌克兰军事威胁俄罗斯代表的知识,包括俄罗斯平静面对西方制裁,这个国家为什么这么有底气呢的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月10日 23:40

网通公司拉网线(怎么才能让网通公司给乡下拉网线)

网通公司拉网线(怎么才能让网通公司给乡下拉网线)

各位老铁们好,相信很多人对网通公司拉网线都不是特别的了解,因此呢,今天就来为大家分享下关于网通公司拉网线以及怎么才能让网通公司给乡下拉网线的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年10月10日 23:30

夜场bbs是什么意思网络语(晚上一起bbs什么意思)

夜场bbs是什么意思网络语(晚上一起bbs什么意思)

大家好,关于夜场bbs是什么意思网络语很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于晚上一起bbs什么意思的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年10月10日 21:30

雷诺曼牌36张牌义(雷诺曼36张和47张的区别)

雷诺曼牌36张牌义(雷诺曼36张和47张的区别)

大家好,雷诺曼牌36张牌义相信很多的网友都不是很明白,包括雷诺曼36张和47张的区别也是一样,不过没有关系,接下来就来为大家分享关于雷诺曼牌36张牌义和雷诺曼36张和47张的区别的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开

2026年10月10日 21:20

免费成品在线视频网页版(成品视频直播软件推荐)

免费成品在线视频网页版(成品视频直播软件推荐)

大家好,如果您还对免费成品在线视频网页版不太了解,没有关系,今天就由本站为大家分享免费成品在线视频网页版的知识,包括成品视频直播软件推荐的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月10日 21:00

台湾明年会边境解封(中国入境政策)

台湾明年会边境解封(中国入境政策)

其实台湾明年会边境解封的问题并不复杂,但是又很多的朋友都不太了解中国入境政策,因此呢,今天小编就来为大家分享台湾明年会边境解封的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月10日 20:50

微信使用代理是什么意思(安装微信时出现“正在使用代理上网,请关闭代理再安装”,是什么意思)

微信使用代理是什么意思(安装微信时出现“正在使用代理上网,请关闭代理再安装”,是什么意思)

各位老铁们好,相信很多人对微信使用代理是什么意思都不是特别的了解,因此呢,今天就来为大家分享下关于微信使用代理是什么意思以及安装微信时出现“正在使用代理上网,请关闭代理再安装”,是什么意思的问题知识,还望可以帮助大家,解决大家的一些困惑,下

2026年10月10日 19:10

最近更新

withdrawal(withdrawal是什么意思)
2026-10-11 07:00:01 浏览:0
热门文章

标签列表